2017-01-13 81 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觀察_contents一旦被關閉_就被寫入文件中,這很少提供解釋。你可以添加到你的答案? (甚至在'flush'聲明之後的評論會是一個改進)。 – ryyker

+0

@ryyker謝謝。更新了我的答案。 – gipsy

相關問題