2016-07-25 23 views
-1

ファイルからデータを読み込み、処理したり、ファイルに戻したりするには、ファイルが大きすぎると一時ファイルにメモリを浪費しないでください1つのチャンクで?Pythonを使用してファイル内のテキストを読み込み、操作し、書き直す方法

+0

文字を変更したり、いくつかの文字を追加/削除して出力ファイルのサイズを変更することを意味しますか?最初のケースでは、チャンクを読み込んだだけでファイル内のチャンクを上書きします。 2番目のケース(ファイルのlenthを変更する)では動作しません。別の出力ファイルを作成する必要があります。 –

答えて

0

次のコードは動作するはずです:

chunksize = 64*1024 #arbitrary number 
offset = 0 
with open(path, 'r+b') as file: 
    while True: 
     file.seek(chunksize*offset) # sets pointer to reading spot 
     chunk = file.read(chunksize) 
     if len(chunk) == 0: # checks if EoF 
      break 
     elif len(chunk) % 16 != 0: # adds bytes to the chunk if it is the last chunk and size doesnt divide by 16 (if processing text of specific size, my case 16 bytes) 
      chunk += ' ' * (16 - len(chunk) % 16) 
     file.seek(chunksize*offset) # returns pointer to beginning of the chunk in order to rewrite the data that was encrypted 
     file.write(do_something(chunk)) # edits and writes data to file 
     offset += 1 

コードは、データを読み込むチャンクの先頭に戻って、それを上書きします。操作されたデータが読み取りデータより大きい場合は機能しません。

+0

これは、操作されたデータが 'chunksize'よりも小さい場合、ファイルの部分を変更しません。 'chunksize * offset'を求めるのではなく、変更されたデータが実際にどこで終了するのかを把握する必要があります。 –

+0

これを動作させるには、データを正確に読み取ったデータのサイズを操作しなければなりません。 'chunksize * offset'を使わないと、書かれたデータの終わりと読んだデータの始めの間に壊れたデータがあります – IsaacDj

関連する問題