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 def函数的定义、使用及参数传递实现代码
Aug 10 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
Python urllib2运行过程原理解析
Jun 04 Python
Python如何对齐字符串
Jul 30 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
Python logging自定义字段输出及打印颜色
Nov 30 Python
python 提取html文本的方法
May 20 Python
利用Python判断整数是否是回文数的3种方法总结
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
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP中使用curl入门教程
2015/07/02 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
jQuery 操作XML入门
2008/12/25 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
chrome调试javascript详解
2015/10/21 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python openCV自制绘画板
2020/10/27 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
Derek Rose官网:英国高档睡衣、家居服和内衣品牌
2020/01/18 全球购物
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
大学生作弊检讨书
2014/09/11 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
党员检讨书
2014/10/13 职场文书
世界名著读书笔记
2015/06/25 职场文书