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

Rei*_*ica 21 python io file temporary-files

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()
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

> python play.py 
READ: 
READ: 
READ: 
READ: 
READ: 
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?有没有办法从临时文件中读取?(无需使用不会自动删除文件的低级mkstemp;而且我不关心命名文件)

ram*_*osg 36

你必须把

f.seek(0)
Run Code Online (Sandbox Code Playgroud)

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

f.seek(0, 2)
Run Code Online (Sandbox Code Playgroud)

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

  • 而不是`f.seek(0,2)`我使用`f.seek(0,os.SEEK_END)` (18认同)

Hei*_*nen 7

read()不会返回任何内容,因为您位于文件的末尾.你需要先打电话seek()然后read()才能退货.例如,将此行放在第一行之前read():

f.seek(-10, 1)
Run Code Online (Sandbox Code Playgroud)

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