2009-07-29 45 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()到结束(如果这是你想继续写)。

相关问题