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 文件与目录操作
Dec 24 Python
使用Python开发windows GUI程序入门实例
Oct 23 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
python中利用zfill方法自动给数字前面补0
Apr 10 Python
python随机数分布random测试
Aug 27 Python
使用pytorch完成kaggle猫狗图像识别方式
Jan 10 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
python3中编码获取网页的实例方法
Nov 16 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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数据结构 算法(PHP描述) 简单选择排序 simple selection sort
2011/08/09 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
php 多文件上传的实现实例
2016/10/23 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
JS 强制设为首页的代码
2009/01/31 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
jquer之ajaxQueue简单实现代码
2011/09/15 Javascript
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
jquery图片切换插件
2015/03/16 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python中apply函数的用法实例教程
2014/07/31 Python
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
Python3实现飞机大战游戏
2020/04/24 Python
python subprocess pipe 实时输出日志的操作
2020/12/05 Python
毕业生就业推荐信范文
2013/12/01 职场文书
大学生的网络创业计划书
2013/12/26 职场文书
2014年教研室工作总结
2014/12/06 职场文书
离婚案件答辩状
2015/05/22 职场文书
结婚典礼主持词
2015/06/29 职场文书
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS