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 文件和路径操作函数小结
Nov 23 Python
理解Python中函数的参数
Apr 27 Python
Python面向对象编程基础解析(二)
Oct 26 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
对python for 文件指定行读写操作详解
Dec 29 Python
pyshp创建shp点文件的方法
Dec 31 Python
django中瀑布流写法实例代码
Oct 14 Python
python创建子类的方法分析
Nov 28 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
json2.js的初步学习与了解
2011/10/06 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
vue实现搜索功能
2019/05/28 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python按钮的响应事件详解
2019/03/04 Python
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
应聘教师推荐信
2013/10/31 职场文书
保险经纪人求职信
2014/03/11 职场文书
电工实训报告总结
2014/11/05 职场文书
刑事和解协议书范本
2014/11/19 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
青年教师听课心得体会
2016/01/15 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
CocosCreator入门教程之网络通信
2021/04/16 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js
httpclient调用远程接口的方法
2022/08/14 Java/Android