Python:大文件中的文本替换

时间:2013-05-26 20:33:01

标签: python

我正在尝试在文本文件中的特定位置插入文本。此文本文件可能相当大(>>>> 10 GB)

我目前使用的方法来阅读它:

with open("my_text_file.txt") as f:
   while True:
     result = f.read(set_number_of_bytes)
     x = process_result(result)
     if x:
       replace_some_characters_that_i_just_read_and write_it_back_to_same_file

但是,我不确定如何实施

replace_some_characters_that_i_just_read_and write_it_back_to_same_file

是否有一些方法可用于确定我在当前文件中读取的内容,我可以使用该方法写入文件。

性能方面,如果我使用上述方法在特定位置写入原始文件,那么在写入之前必须找到写入位置会有效率问题吗?

或者你会建议创建一个完全不同的文件,并在上面的每个循环上附加到该文件。然后在此操作完成后删除原始文件?假设空间不是一个大问题,但性能是。

1 个答案:

答案 0 :(得分:4)

使用fileinput module,在替换数据时正确处理文件,并设置inplace标志:

import sys
import fileinput

for line in fileinput.input('my_text_file.txt', inplace=True):
    x = process_result(line)
    if x:
        line = line.replace('something', x)

    sys.stdout.write(line)

当您使用inplace标志时,原始文件将移至备份,并且您对sys.stdout的任何内容都将写入原始文件名(因此,作为新文件)。确保包括所有改变或不改变的行。

如果您的替换数据与您要替换的部分的完全字节数相同,则 重写整个文件。