Python - tempfile.TemporaryFile无法读取;为什么?
关于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,因为那样创建的文件不会自动删除;而且我不在乎文件是否有名字)
2 个回答
7
read()
不返回任何内容是因为你已经到达了文件的末尾。你需要先调用 seek()
,然后 read()
才会返回一些东西。例如,在第一个 read()
前面加上这一行:
f.seek(-10, 1)
当然,在再次写入之前,确保先用 seek()
移动到文件的末尾(如果你想从那里继续写的话)。
39
在你尝试读取文件之前,必须先放上
f.seek(0)
这段代码(这样可以让你回到文件的开头),然后再用
f.seek(0, 2)
这段代码返回到文件的末尾,这样你就可以确保不会覆盖掉文件里的内容。