2009-07-29 52 views
19

official documentation for TemporaryFile讀取:Python - tempfile.TemporaryFile無法讀取;爲什麼?

模式參數默認爲「W + B」 使得文件創建可以讀取 並沒有被關閉寫入。

然而,預期下面的代碼不起作用:

import tempfile 

def play_with_fd(): 
    with tempfile.TemporaryFile() as f: 
     f.write('test data\n') 
     f.write('most test data\n') 

     print 'READ:', f.read() 

     f.write('further data') 

     print 'READ:', f.read() 

     f.write('even more') 
     print 'READ:', f.read() 

     print 'READ:', f.read() 
     print 'READ:', f.read() 

if __name__ == '__main__': 
    play_with_fd() 

我得到的輸出是:

> python play.py 
READ: 
READ: 
READ: 
READ: 
READ: 

任何人都可以解釋這種現象?有沒有辦法從臨時文件讀取? (不必使用不會自動刪除文件的低級別mkstemp;並且我不在乎命名文件)

+1

使用`flush`沒有幫助。 – 2009-07-29 20:32:58

回答

35

你必須把

f.seek(0) 

試圖讀取該文件(這將送你到文件的開始)前,和

f.seek(0, 2) 

返回到結束,所以你可以放心你不會覆蓋它。

+17

而不是`f.seek(0,2)`我會用`f.seek(0,os.SEEK_END)` – 2009-07-30 19:58:14

7

read()由於您處於文件末尾,因此不會返回任何內容。您需要先撥打seek(),然後read()纔會返回任何內容。例如,把此行的第一read()面前:

f.seek(-10, 1) 

當然,再寫入之前,一定要seek()到結束(如果這是你想繼續寫)。

相關問題