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进阶教程之文本文件的读取和写入
Aug 29 Python
Python File readlines() 使用方法
Mar 19 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
python实现自动解数独小程序
Jan 21 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
Django学习之文件上传与下载
Oct 06 Python
pytorch 实现查看网络中的参数
Jan 06 Python
PyQt中使用QtSql连接MySql数据库的方法
Jul 28 Python
python 中关于pycharm选择运行环境的问题
Oct 31 Python
只用20行Python代码实现屏幕录制功能
Jun 02 Python
python 使用tkinter与messagebox写界面和弹窗
Mar 20 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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也可以?成Shell Script
2006/10/09 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
2012/08/14 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
Express的路由详解
2015/12/10 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[05:39]2014DOTA2西雅图国际邀请赛 淘汰赛7月14日TOPPLAY
2014/07/14 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python中的True,False条件判断实例分析
2015/01/12 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
python 实现绘制整齐的表格
2019/11/18 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
试用期员工工作自我评价
2014/09/10 职场文书
2015年信访工作总结
2015/04/07 职场文书
办公室岗位职责范本
2015/04/11 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
Win11开始菜单添加休眠选项
2022/04/19 数码科技