TemporaryFile的官方文档上写着:

  

mode参数默认为'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;而且我不关心命名文件)

有帮助吗?

解决方案

你必须把

f.seek(0)

在尝试读取文件之前(这会将您发送到文件的开头)和

f.seek(0, 2)

返回到最后,以确保您不会覆盖它。

其他提示

read()不会返回任何内容,因为您位于文件的末尾。您需要致电 seek() 首先在 read()之前返回任何内容。例如,将此行放在第一个 read()

的前面
f.seek(-10, 1)

当然,在再次写作之前,一定要 seek()到最后(如果那是你想继续写的地方)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top