2013-05-26 114 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被寫入到原始文件名(所以,作爲一個新文件)。確保你包含所有的行,是否改變。

重寫完整的文件時,您的替換數據是不準確數相同的字節爲要更換的部件。