2

テキスト ファイルの非常に特定の場所にテキストを挿入しようとしています。このテキスト ファイルはかなり大きくなる可能性があります (>> 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

ファイルへの書き込みに使用できる現在のファイルのどこまで読んだかを判断するために使用できる方法はありますか。

パフォーマンスに関しては、上記のアプローチを使用して元のファイルの特定の場所に書き込む場合、書き込む前に書き込み場所を見つけなければならないという効率上の問題はありますか?

または、まったく異なるファイルを作成し、上記の各ループでそのファイルに追加することをお勧めしますか? この操作が完了したら、元のファイルを削除しますか? スペースは大きな問題ではないと仮定しますが、パフォーマンスは重要です。

4

1 に答える 1

4

データを置き換えるときにファイルを正しく処理するfileinputモジュール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はすべて元のファイル名に (新しいファイルとして) 書き込まれます。変更されているかどうかにかかわらず、すべての行が含まれていることを確認してください。

置換データが、置換するパーツと正確に同じバイト数でない場合は常に、完全なファイルを書き直す必要あります。

于 2013-05-26T20:35:57.210 に答える