2013-05-26 72 views
2

我试图在文本文件中非常特定的位置插入文本。这个文本文件可以相当大(>> 10 GB)Python:在大文件中替换文本

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

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

您替换的文本与原始文件长度完全相同吗?如果没有,那么你没有多少选择,并且需要创建一个新文件。 –

+0

并非所有的文字都与原文相同。文件输入模块是否在每次写入时(每次迭代循环)都在内部创建一个新文件? (在下面提到) – user1431282

+1

@ user1431282:扩展到我的答案;将文件移到一边,然后编写一个完整的新文件,并根据需要更改原始数据。 –

回答

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被写入到原始文件名(所以,作为一个新文件)。确保你包含所有的行,是否改变。

重写完整的文件时,您的替换数据是不准确数相同的字节为要更换的部件。