Python:TemporaryFile 读取时返回空字符串
我需要从一个字符串创建一个文件,这样我就可以在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')