我需要从字符串创建一个文件,这样我就可以将它用作Django中电子邮件的附件。经过一些谷歌搜索后,我找到了带有TemporaryFile的临时文件模块,但它没有像我预期的那样工作。
以下代码返回一个空字符串。
>>> f = tempfile.TemporaryFile()
>>> f.write('foobar')
>>> f.read()
''
答案 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来模拟字符串上的文件。这应该快得多,因为根本没有磁盘操作。