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

时间:2011-03-26 19:39:02

标签: python django

我需要从字符串创建一个文件,这样我就可以将它用作Django中电子邮件的附件。经过一些谷歌搜索后,我找到了带有TemporaryFile的临时文件模块,但它没有像我预期的那样工作。

以下代码返回一个空字符串。

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

3 个答案:

答案 0 :(得分:6)

当你调用read时,它会尝试从它停止的位置读取,这是在文件的末尾。在阅读之前,您需要跳转到文件的开头:

f.seek(0)
f.read()

如果你需要再次写作,如果你不想覆盖你的东西,你应该在写作之前跳到最后:

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

答案 1 :(得分:1)

尝试执行f.seek(0)以回放到写入和读取之间的开头。 read()调用始终在数据的 end 处留下“文件指针”(这是操作系统的食指的一种,指向记住您当前所​​在文件中的位置)你刚才写的。

答案 2 :(得分:1)

如果您的内存中已有字符串,则可以使用StringIO或cStringIO来模拟字符串上的文件。这应该快得多,因为根本没有磁盘操作。