如何在Python中结合tempfile和tarfile?

6 投票
1 回答
5234 浏览
提问于 2025-04-18 07:40

假设我们有一个临时文件,可以用来写一些输出内容。但出于某种奇怪的原因,我们希望用一些归档技术来压缩它,比如用 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 保存在你的文件系统中,方便以后查看它的内容。

撰写回答