如何在Python中结合tempfile和tarfile?
假设我们有一个临时文件,可以用来写一些输出内容。但出于某种奇怪的原因,我们希望用一些归档技术来压缩它,比如用 tar。
这里说的临时文件是指那种没有可见名字的文件,是通过 tempfile.TemporaryFile() 创建的。有没有什么好的办法呢?
我最初的想法是可能需要一些调整和类的继承……有没有更简单的方法呢?
1 个回答
5
tarfile.open
这个函数的 fileobj
参数就是用来做这个的:你可以传入任何一个像文件一样的对象,只要它支持写入,tarfile
就会很高兴地使用它,而不是去访问文件系统。需要注意的是,这种文件应该以二进制模式打开,而不是文本模式(默认情况下,tempfile.TemporaryFile
是以文本模式打开的)。
同样,zipfile.ZipFile
的第一个参数也可以是一个像文件一样的对象。
所以你可以这样做:
with tempfile.TemporaryFile(suffix='.tar.gz') as f:
with tarfile.open(fileobj=f, mode='w:gz') as tar:
tar.add(…)
f.flush()
f.seek(0)
print(f.read())
或者
with tempfile.NamedTemporaryFile('wb', suffix='.tar.gz', delete=False) as f:
with tarfile.open(fileobj=f, mode='w:gz') as tar:
tar.add(…)
这样可以把 f.name
保存在你的文件系统中,方便以后查看它的内容。