Python 替换超过 20GB 文本文件中的一行

1 投票
2 回答
784 浏览
提问于 2025-04-18 18:13

我知道这个问题有很多解决方法。

我需要的是一个简单的Python脚本,能够在一个大文本文件中只替换一行。

这行总是从文件的开头算起的第四行。

因为这个文件(其实是多个文件)超过20GB,我不想把它加载到内存中或者创建一个副本,只想高效地替换一行。

如果有人能帮我解决这个问题,我会非常感激。

A.

PS. 我知道vi可以做到这一点,但我需要的是一个脚本,这样那些不熟悉vi的人也能操作。

2 个回答

0

试试使用内存映射文件。你可以查看这个链接了解更多信息:https://docs.python.org/2/library/mmap.html

2

你可以打开一个文件进行更新,或者像其他回答提到的那样使用 mmap。下面是一个如何在文件中间编辑的例子:

def example(fname):
    f = open(fname, 'r+b')
    f.seek(100)
    f.write('foobar')
    f.close()

这个例子会在文件的第100个位置插入“foobar”。不过一般来说,如果你编辑的那一行变得更长或更短,你还是需要从头到尾检查整个文件(你只能在文件的末尾增加或减少内容,而不能在开头)。在这方面,Vi也没有什么特别的,规则是一样的。

为了简单起见,我会遍历整个文件,然后输出一个新的编辑过的文件。你肯定不想一次性把整个文件都读到内存里。可以逐行读取,直到需要编辑的那一行,然后再按块读取。

你也可以使用 edsed 命令,因为这些命令在编写脚本时可能比 vi 更简单。

撰写回答