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 两个列表的差集、并集和交集实现代码
Sep 21 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
python difflib模块示例讲解
Sep 13 Python
python实现串口自动触发工作的示例
Jul 02 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
Jun 05 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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
德生PL330的评价与改造
2021/03/02 无线电
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python中tell()方法的使用详解
2015/05/24 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python利用Beautiful Soup模块创建对象详解
2017/03/27 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
python实现随机加减法生成器
2020/02/24 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
如何在C# winform中异步调用web services
2015/09/21 面试题
入股协议书范本
2014/04/14 职场文书
企业法人授权委托书
2014/09/25 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
比较几种Redis集群方案
2021/06/21 Redis
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL