使用python删除大文件中的特定行的最优算法

问题

1.a
2.ab
3.bc

文件如上所示,数字为行数。比如我需要删除内容为”a”的行,在大文件情况下,用何种语法最优?
其他编程语言也可推荐,谢谢。

最佳答案

with open('file.txt', 'r') as old_file:
    with open('file.txt', 'r+') as new_file:

        # 定位到需要删除的行,跳出循环时,seek_point 存放的是被删除行的行首的光标位置
        while True:
            # 记录光标位置
            seek_point = old_file.tell()

            if 'a' in old_file.readline().strip().split('.'):
                # 光标跳到被删除行的下一行行首
                break

        # 设置光标位置,光标在被删除行的行首
        new_file.seek(seek_point, 0)

        # 被删除行的下一行读给 next_line
        next_line = old_file.readline()

        # 连续覆盖剩余行,后面所有行上移一行
        while next_line:
            new_file.write(next_line)
            next_line = old_file.readline()

        # 写完最后一行后截断文件,因为删除操作,文件整体少了一行,原文件最后一行需要去掉
        new_file.truncate()
标签:Python 发布于:2019-11-11 12:21:21