2013-12-11 29 views
1

問題是寫入文件後它是空的,我不明白爲什麼。這裏是我的代碼:寫入文件f後,調用f.read()返回無

self.f = tempfile.NamedTemporaryFile(delete=False)  
    for i in range(self.num_chars_file): 
     self.f.write(str(i)) 
    reader_writer.testfile = self.f.name 
    print '************************' 
    print self.f.read() 

爲什麼會發生這種情況,以及如何解決這個問題?

回答

2

你需要尋求回到開始,如果你想再次讀取相同數據:

self.f.seek(0) 
print self.f.read() 

File對象是線性的,如磁帶,並有一個「當前位置」。當您寫入文件時,當前位置會一直移動,以便在該位置發生新的寫入,並再次向前移動位置。這同樣適用於閱讀。

因此,寫入後,文件位置正好在文件的末尾。嘗試閱讀而不移動文件位置意味着不會找到更多的數據。 file.seek()移動其他地方的當前文件位置; file.seek(0)將其移回文件的開頭。

+1

您應該謹慎有關下一寫尋道效果!也許他不想覆蓋舊的數據...... –

+3

@DonQuestion:但f.read()調用會將當前位置再次移動到最後。無論如何,增加了關於文件定位如何工作的論文。 –

+0

你是絕對正確的,我只是想搶先一個可能的後續行動,我希望你現在能夠阻止! ;-) –

3

您應該將文件位置移動到開頭。

print '************************' 
self.f.seek(0) # <-------- 
print self.f.read() 

否則,文件位置在文件(該文件寫入已完成)結束