Python在> 20GB文本文件中替换一行

时间:2014-08-22 17:14:12

标签: python file replace line bigdata

我完全清楚有很多方法可以解决这个问题。

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

它始终是第四行。

由于文件(实际上是文件)大于20GB,我不想将其加载到内存或创建副本,只需有效地替换一行。

我很乐意在这方面提供任何帮助。

一个。

PS。我知道vi可以做到这一点,但我需要它作为一个脚本,所以非vi兼容的人也可以这样做。

2 个答案:

答案 0 :(得分:2)

您可以打开文件进行更新,或使用mmap作为建议的其他答案。有关如何在文件中间进行编辑的示例:

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

这将在文件中位置100的“foobar”中进行编辑。但是,在您编辑的行变得更长和更短的一般情况下,您仍然必须经历整个文件一直到最后(您只能在末尾扩展和截断文件,而不是在头部) 。 Vi在这方面并不神奇,同样的规则适用于它。

为了简单起见,我将遍历整个文件并输出一个新的编辑文件。你绝对不想一次把它全部读入内存。在您需要编辑的行之前逐行进行,然后逐块进行。

您还可以使用edsed命令,因为脚本比vi更简单。

答案 1 :(得分:0)

尝试使用内存映射文件。 https://docs.python.org/2/library/mmap.html