2010-11-28 46 views
2

不知道如何解釋這一點,任何幫助將不勝感激!python file.write()需要兩次嘗試?

Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import urllib2, pynotify, tempfile, os 
>>> opener = urllib2.build_opener() 
>>> page = opener.open('http://img.youtube.com/vi/RLGJU_xUVTs/1.jpg') 
>>> thumb = page.read() 
>>> temp = tempfile.NamedTemporaryFile(suffix='.jpg') 
>>> temp.write(thumb) 
>>> os.path.getsize(temp.name) 
0 
>>> temp.write(thumb) 
>>> os.path.getsize(temp.name) 
4096 

謝謝!

回答

10

如果打開thumb文件,你會看到有一個完整拷貝,你是在它寫入數據的部分副本。

刷新文件而不是第二次寫入。

temp.flush() 

該文件不是第一次寫入,因爲內容不足以填充緩衝區。第二次寫入溢出緩衝區,因此寫入緩衝區的數據。

正如卡梅倫在他的回答中指出,當你關閉文件緩衝區自動刷新。如果由於某種原因想要保持打開狀態(以及這是您的問題似乎表明您已這麼做),那麼您可以撥打flush並立即寫入數據。

2

在檢查文件對象的大小之前,您還沒有在文件對象上調用flush()close() - 有一個內部緩衝區,只有在寫入一定數量的數據後纔會自動刷新(這樣可以避免過多的做很多寫操作時的磁盤)。

+0

謝謝! flush()已經做到了,但是調用close()會刪除文件,我假設b/c是一個臨時文件。 – 2010-11-28 01:08:31