python 删除大文件中的某一行(最有效率的方法)

 更新时间:2017年08月19日 09:33:15   投稿:jingxian  
下面小编就为大家带来一篇python 删除大文件中的某一行(最有效率的方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

用 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编程functools模块创建修改的高阶函数解析

    Python编程functools模块创建修改的高阶函数解析

    本篇文章主要为大家介绍functools模块中用于创建、修改函数的高阶函数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09
  • PyQt5 QSerialPort子线程操作的实现

    PyQt5 QSerialPort子线程操作的实现

    这篇文章主要介绍了PyQt5 QSerialPort子线程操作的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 对python:print打印时加u的含义详解

    对python:print打印时加u的含义详解

    今天小编就为大家分享一篇对python:print打印时加u的含义详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 关于Matplotlib绘制动态实时曲线的方法改进指南

    关于Matplotlib绘制动态实时曲线的方法改进指南

    这篇文章主要给大家介绍了关于Matplotlib绘制动态实时曲线的相关资料,matplotlib是python里最popular的画图工具,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-06-06
  • tensorflow如何将one_hot标签和数字(整数)标签进行相互转化

    tensorflow如何将one_hot标签和数字(整数)标签进行相互转化

    这篇文章主要介绍了tensorflow如何将one_hot标签和数字(整数)标签进行相互转化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Numpy中扁平化函数ravel()和flatten()的区别详解

    Numpy中扁平化函数ravel()和flatten()的区别详解

    本文主要介绍了Numpy中扁平化函数ravel()和flatten()的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Opencv常见图像格式Data Type及代码实例

    Opencv常见图像格式Data Type及代码实例

    这篇文章主要介绍了Opencv常见图像格式Data Type及代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Matplotlib绘制子图的常见几种方法

    Matplotlib绘制子图的常见几种方法

    Matplotlib的可以把很多张图画到一个显示界面,在作对比分析的时候非常有用。本文就介绍了几种方法,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 详解如何利用Python装饰器优化代码

    详解如何利用Python装饰器优化代码

    这篇文章主要带大家深入探讨装饰器的应用,包括计时器装饰器和缓存装饰器等的实现,文中的示例代码讲解详细,需要的小伙伴可以参考下
    2023-05-05
  • 13个最常用的Python深度学习库介绍

    13个最常用的Python深度学习库介绍

    这篇文章主要介绍了13个最常用的Python深度学习库介绍,具有一定参考价值,需要的朋友可以参考下。
    2017-10-10

最新评论