【发布时间】:2013-02-08 09:34:31
【问题描述】:
我试图从 tar.gz 文件中只读取一个文件。对 tarfile 对象的所有操作都可以正常工作,但是当我从具体成员中读取时,总是会引发 StreamError,请检查以下代码:
import tarfile
fd = tarfile.open('file.tar.gz', 'r|gz')
for member in fd.getmembers():
if not member.isfile():
continue
cfile = fd.extractfile(member)
print cfile.read()
cfile.close()
fd.close()
cfile.read() 总是导致“tarfile.StreamError: 不允许向后搜索”
我需要将内容读取到内存中,而不是转储到文件中(extractall 工作正常)
谢谢!
【问题讨论】:
-
是否存在无法转储到文件的原因?您可以使用,例如,
tempfile.mkdtemp创建一个目录,在那里解压,读取您想要的文件,然后删除该目录。除非您可能无法访问任何可写文件系统,或者您已经尝试过并且性能无法接受,否则我想不出任何其他理由来排除它。 -
extractall到tmp目录