Python 替换超过 20GB 文本文件中的一行
我知道这个问题有很多解决方法。
我需要的是一个简单的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也没有什么特别的,规则是一样的。
为了简单起见,我会遍历整个文件,然后输出一个新的编辑过的文件。你肯定不想一次性把整个文件都读到内存里。可以逐行读取,直到需要编辑的那一行,然后再按块读取。
你也可以使用 ed
或 sed
命令,因为这些命令在编写脚本时可能比 vi
更简单。