official documentation for 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;而且我不关心命名文件)
答案 0 :(得分:36)
你必须把
f.seek(0)
在尝试读取文件之前(这会将您发送到文件的开头)和
f.seek(0, 2)
返回到最后,以确保您不会覆盖它。
答案 1 :(得分:7)
read()
不会返回任何内容,因为您位于文件的末尾。在read()
返回任何内容之前,您需要先致电seek()
。例如,将此行放在第一个read()
:
f.seek(-10, 1)
当然,在再次写作之前,请务必seek()
到最后(如果那是你想继续写的地方)。