因为 PIL 需要一个文件对象,所以我试图使用 tempfile 创建一个文件。遇到我认为的缓冲区问题

Gek*_*suu 1 python file-io file python-imaging-library

我正在尝试从我的数据库中的条目创建一个临时文件。我做了一个print(filedata['data']),我可以看到数据正在被正确检索,但即使temp_h.flush()我从未看到任何数据保存到文件中。当我去检索它时,文件是空的。有人可以向我解释是什么导致了这种情况,如果有更好的方法来做我正在尝试用 PIL 做的事情,我也很想学习。我在带有 EXT3 文件系统的 Linux 系统上运行它

def main():
    '''Main'''

    for nohisto in thestash.stash.get_files():
       fileid = str(nohisto['_id'])
       filedata = openstash(fileid)
       temp_h = tempfile.TemporaryFile(mode='r+')
       temp_h.write(filedata['data'])
       temp_h.flush()
       time.sleep(3)
       myhisto = Image.open(temp_h).histogram()
Run Code Online (Sandbox Code Playgroud)

Pau*_*McG 5

尝试mode='w+',然后在写入后,seek(0)将 i/o 指针放回文件开头。您还可以使用 StringIO 模块在内存中创建类似文件的对象。

  • `seek()` 是一个很少使用的方法,当你需要它时很容易没有意识到...... (2认同)