2017-01-13 5 views
0

私は、Pythonでファイルに書き込むときに、内容がファイルに書き込まれると気づきました。例えばファイルの内容が閉じられた後にのみ書き込まれるのはなぜですか?

with open('test.txt','w') as ffile: 
    ffile.write("testing") 
    time.sleep(20) 

この例では、 "テストは" 20秒待った後に書き込まれます。

どうやってこれが起こりますか?なぜ同時にファイルに書き込むのではないのですか?

+1

インデントを修正してください。問題はそうであるように意味がありません。バッファリングされた出力はこれを行います。 –

+1

短いバッファリングでは、ファイルへの書き込みにはコストがかかります(時間がかかります)。したがって、より多くのコンテンツが届くように書き込みが延期されます。 –

+0

申し訳ありませんが、私はそれを修正しました。 – Ria

答えて

4

バッファリングの影響を確認しています。ディスクI/Oはバッファを使用してパフォーマンスを向上させ、バッファに十分なデータを書き込まずにバッファをフラッシュします。

さらにデータを書き込むか、ファイルを閉じると、両方ともバッファをフラッシュします。あるいは、非常に少数(バッファが保持するバイト数)にバッファサイズを設定:

with open('test.txt', 'w', 2) as ffile: 

オプション01は特別な意味を持ちます。 0は、完全にバッファリングを無効にします(バイナリモードファイルのみ利用可能)。1がテキストファイルのデフォルトです(ラインバッファリングを使用し、フラッシュする改行を書きます)。

ffile.flush() 

ffile.write('\n') 

なく、少なくとも最後に、あなたがfile.flush() methodを使用して明示的にフラッシュすることができます:また、テキストファイルを持っている場合、あなたはフラッシュをトリガするために改行を書くことができることを意味し

+0

ありがとうございました。パフォーマンスがどのように改善されているか、少なくともソースにリンクされているかについてもっと詳しく説明できますか? – Ria

+1

「2」とは何かを説明するかもしれません。あなたが使っているオプション。 –

+0

@ Ev.Kounis:バッファサイズを2バイトに設定します。 –

1
with open('test.txt','w') as ffile: 
    ffile.write("testing") 
    ffile.flush() # This forces the buffer to be written to the file. 
    time.sleep(20) 
+0

は構文的には正解ですが、なぜOPがそのファイルにclosed_に書き込まれているのを見るのかについての説明はほとんどありません。それをあなたの答えに加えることができますか? ( 'flush'文の後のコメントでさえ改善されるでしょう)。 – ryyker

+0

@ryykerありがとうございます。私の答えを更新しました。 – gipsy

関連する問題