gpt4 book ai didi

python - 为什么 tempfile.SpooledTemporaryFile 不实现可读、可写、可查找?

转载 作者:太空狗 更新时间:2023-10-30 01:11:51 26 4
gpt4 key购买 nike

在 Python 3.6.1 中,我尝试将 tempfile.SpooledTemporaryFile 包装在 io.TextIOWrapper 中:

with tempfile.SpooledTemporaryFile() as tfh:
do_some_download(tfh)
tfh.seek(0)
wrapper = io.TextIOWrapper(tfh, encoding='utf-8')
yield from do_some_text_formatting(wrapper)

wrapper = io.TextIOWrapper(tfh, encoding='utf-8') 给我一个错误:

AttributeError: 'SpooledTemporaryFile' object has no attribute 'readable'

如果我创建一个像这样的简单类,我可以绕过错误(对于 writableseekable 我会得到类似的错误):

class MySpooledTempfile(tempfile.SpooledTemporaryFile):                                                                                
@property
def readable(self):
return self._file.readable

@property
def writable(self):
return self._file.writable

@property
def seekable(self):
return self._file.seekable

tempfile.SpooledTemporaryFile 还没有这些属性是否有充分的理由?

最佳答案

SpooledTemporaryFile 实际上在幕后使用了 2 个不同的 _file 实现——最初是一个 io 缓冲区(StringIOBytesIO),直到它翻转并通过 tempfile.TemporaryFile() 创建一个“类文件对象”(例如,当超过 max_size 时).

io.TextIOWrapper 需要一个 BufferedIOBase 基类/接口(interface),由 io.StringIOio.BytesIO< 提供,但不一定由 TemporaryFile() 返回的对象(尽管在我对 OSX 的测试中,TemporaryFile() 返回了一个 _io.BufferedRandom 对象,它具有所需的接口(interface),我的理论是这可能取决于平台)。

因此,我希望您的 MySpooledTempfile 包装器在翻转后可能会在某些平台上失败。

关于python - 为什么 tempfile.SpooledTemporaryFile 不实现可读、可写、可查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47160211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com