mpa*_*tek 5 python io temporary-files
在Python 3.6.1中,我尝试在io.TextIOWrapper中包装tempfile.SpooledTemporaryFile:
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)
Run Code Online (Sandbox Code Playgroud)
该行wrapper = io.TextIOWrapper(tfh, encoding='utf-8')给了我一个错误:
AttributeError: 'SpooledTemporaryFile' object has no attribute 'readable'
Run Code Online (Sandbox Code Playgroud)
如果我创建一个简单的类这样的,我可以绕过错误(我得到类似的错误writable和seekable):
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
Run Code Online (Sandbox Code Playgroud)
tempfile.SpooledTemporaryFile有没有一个很好的理由还没有这些属性?
SpooledTemporaryFile实际上_file在引擎盖下使用了 2 种不同的实现 - 最初是一个ioBuffer (StringIO或BytesIO),直到它翻转并通过tempfile.TemporaryFile()(例如,当max_size超出时)创建一个“类文件对象” 。
io.TextIOWrapper需要一个BufferedIOBase基类/接口,它由io.StringIOand提供io.BytesIO,但不一定由返回的对象提供TemporaryFile()(尽管在我在 OSX 上的测试中,TemporaryFile()返回了一个_io.BufferedRandom具有所需接口的对象,我的理论是这可能取决于平台)。
因此,我希望您的MySpooledTempfile包装器在翻转后可能会在某些平台上失败。
| 归档时间: |
|
| 查看次数: |
3215 次 |
| 最近记录: |