我正在尝试在文本文件中的特定位置插入文本。此文本文件可能相当大(>>>> 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
是否有一些方法可用于确定我在当前文件中读取的内容,我可以使用该方法写入文件。
性能方面,如果我使用上述方法在特定位置写入原始文件,那么在写入之前必须找到写入位置会有效率问题吗?
或者你会建议创建一个完全不同的文件,并在上面的每个循环上附加到该文件。然后在此操作完成后删除原始文件?假设空间不是一个大问题,但性能是。
答案 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
的任何内容都将写入原始文件名(因此,作为新文件)。确保包括所有改变或不改变的行。
如果您的替换数据与您要替换的部分的完全字节数相同,则 重写整个文件。