python 删除大文件中的某一行(最有效率的方法)


Posted in Python onAugust 19, 2017

用 python 处理一个文本时,想要删除其中中某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件。

但如果要处理一个很大的文本,比如GB级别的文本时,这种方法不仅需要占用很大内存,而且一次性读入内存时耗费时间,还有可能导致内存溢出。

所以,需要用另外一个思路去处理。

我们可以使用 open() 方法把需要修改的文件打开为两个文件,然后逐行读入内存,找到需要删除的行时,用后面的行逐一覆盖。实现方式见以下代码。

with open('file.txt', 'r') as old_file:
  with open('file.txt', 'r+') as new_file:

    current_line = 0

    # 定位到需要删除的行
    while current_line < (del_line - 1):
      old_file.readline()
      current_line += 1

    # 当前光标在被删除行的行首,记录该位置
    seek_point = old_file.tell()

    # 设置光标位置
    new_file.seek(seek_point, 0)

    # 读需要删除的行,光标移到下一行行首
    old_file.readline()
    
    # 被删除行的下一行读给 next_line
    next_line = old_file.readline()

    # 连续覆盖剩余行,后面所有行上移一行
    while next_line:
      new_file.write(next_line)
      next_line = old_file.readline()

    # 写完最后一行后截断文件,因为删除操作,文件整体少了一行,原文件最后一行需要去掉
    new_file.truncate()

以上这篇python 删除大文件里的某一行(最有效率的方法)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
从零学python系列之数据处理编程实例(二)
May 22 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python常见工厂函数用法示例
Mar 21 Python
Python 读写文件的操作代码
Sep 20 Python
Python 变量类型详解
Oct 10 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python3如何判断三角形的类型
Apr 12 Python
python3中sys.argv的实例用法
Apr 24 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
学python最电脑配置有要求么
Jul 05 Python
Python实现DBSCAN聚类算法并样例测试
Jun 22 Python
在java中如何定义一个抽象属性示例详解
Aug 18 #Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 #Python
python中子类调用父类函数的方法示例
Aug 18 #Python
Python设计实现的计算器功能完整实例
Aug 18 #Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 #Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 #Python
对python中return和print的一些理解
Aug 18 #Python
You might like
PHP获取MAC地址的函数代码
2011/09/11 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
php依赖注入知识点详解
2019/09/23 PHP
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
JS的get和set使用示例
2014/02/20 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Linux下多个Python版本安装教程
2018/08/15 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
Python pip配置国内源的方法
2020/02/14 Python
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
美术毕业生求职信
2014/02/25 职场文书
机电专业求职信
2014/06/14 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
厉行节约工作总结
2015/08/12 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书