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 21 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
python正则中最短匹配实现代码
Jan 16 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
Python3中详解fabfile的编写
Jun 24 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
Dec 22 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
Python如何避免文件同名产生覆盖
Jun 09 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 Python
Python基于template实现字符串替换
Nov 27 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程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
JavaScript 组件之旅(一)分析和设计
2009/10/28 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python保存数据到本地文件的方法
2018/06/23 Python
Python中Unittest框架的具体使用
2019/08/27 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
管理学专业个人求职信范文
2013/12/13 职场文书
资产运营委托书范本
2014/10/16 职场文书
初中家长意见
2015/06/03 职场文书
公司人事管理制度
2015/08/05 职场文书
转变工作作风心得体会
2016/01/23 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
详解Redis复制原理
2021/06/04 Redis
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python