2013-12-11 31 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() 

否则,文件位置在文件(该文件写入已完成)结束