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实现批量修改文件名实例
Jul 08 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
May 18 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
python实现布隆过滤器及原理解析
Dec 08 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
Python是什么 Python的用处
May 26 Python
python程序实现BTC(比特币)挖矿的完整代码
Jan 20 Python
Django 如何实现文件上传下载
Apr 08 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
用Javascript实现UTF8编码转换成gb2312编码
2006/12/22 Javascript
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
八大排序算法的Python实现
2021/01/28 Python
不可错过的十本Python好书
2017/07/06 Python
Python 多核并行计算的示例代码
2017/11/07 Python
详解Python之unittest单元测试代码
2018/01/24 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
django-allauth入门学习和使用详解
2019/07/03 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
教师政风行风评议心得体会
2014/10/21 职场文书
健康状况证明书
2014/11/26 职场文书
先进员工事迹材料
2014/12/20 职场文书
财务会计岗位职责
2015/02/03 职场文书
新员工入职感想
2015/08/07 职场文书