Python:TemporaryFile 读取时返回空字符串

7 投票
3 回答
1700 浏览
提问于 2025-04-16 14:29

我需要从一个字符串创建一个文件,这样我就可以在Django中把它当作邮件的附件使用。经过一些搜索,我发现了tempfile模块里的TemporaryFile,但它的表现并没有我预期的那样。

下面的代码返回了一个空字符串。

>>> f = tempfile.TemporaryFile()
>>> f.write('foobar')
>>> f.read()
''

3 个回答

1

如果你已经在内存中有一个字符串,可以使用 StringIO 或 cStringIO 来把这个字符串当作文件来用。这样做会快很多,因为根本不需要进行任何磁盘操作。

1

试着在写完数据和读数据之间加一个 f.seek(0),这样可以把位置指针回到文件的开头。每次调用 read() 时,都会把“文件指针”(可以想象成操作系统的一个手指,用来记住你在文件中的位置)放在你刚写入数据的末尾

13

当你调用读取功能时,它会尝试从上次停止的地方继续读取,也就是文件的末尾。在读取之前,你需要先跳到文件的开头:

f.seek(0)
f.read()

如果你需要再次写入内容,但不想覆盖之前的内容,那么在写入之前,你应该先跳到文件的末尾:

f.seek(0, os.SEEK_END)
f.write('some stuff')

撰写回答