【问题标题】:Python: TemporaryFile returns empty string when readPython:TemporaryFile在读取时返回空字符串
【发布时间】:2011-07-23 14:55:34
【问题描述】:

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

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

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

【问题讨论】:

标签: python django


【解决方案1】:

当您调用 read 时,它会尝试从它停止的地方开始读取,也就是文件末尾。阅读前需要跳转到文件开头:

f.seek(0)
f.read()

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

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

【讨论】:

    【解决方案2】:

    尝试使用f.seek(0) 在写入和读取之间倒回到开头。 read() 调用总是在您拥有的数据的end 处留下“文件指针”(一种操作系统的食指,指向记住您当前在文件中的位置)刚写完。

    【讨论】:

    • 哎呀,看来我的回答太慢了:P
    • 另一方面,您在再次写作之前详细了解了如何移动到最后,虽然这不是问题的一部分,但对于这位提问者来说是件好事!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多