Python - tempfile.TemporaryFile无法读取;为什么?

25 投票
2 回答
16505 浏览
提问于 2025-04-15 13:15

关于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)

这段代码返回到文件的末尾,这样你就可以确保不会覆盖掉文件里的内容。

撰写回答