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 14 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
Python的语言类型(详解)
Jun 24 Python
分享一个简单的python读写文件脚本
Nov 25 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
Python 实现数据结构中的的栈队列
May 16 Python
python同步两个文件夹下的内容
Aug 29 Python
Django 自定义分页器的实现代码
Nov 24 Python
python线程定时器Timer实现原理解析
Nov 30 Python
简单介绍django提供的加密算法
Dec 18 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
Python+OpenCV实现图片中的圆形检测
Apr 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
sphinx增量索引的一个问题
2011/06/14 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
php命令行模式代码实例详解
2021/02/26 PHP
javascript string字符串优化问题
2011/07/31 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
利用JavaScript在网页实现八数码启发式A*算法动画效果
2017/04/16 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
Angularjs添加排序查询功能的实例代码
2017/10/24 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
pycharm的python_stubs问题
2020/04/08 Python
python中pyplot基础图标函数整理
2020/11/10 Python
pycharm进入时每次都是insert模式的解决方式
2021/02/05 Python
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
老公爱的承诺书
2014/03/31 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
技术股东合作协议书
2014/12/02 职场文书