4

假设我们有一个临时文件,我们可以向其中写入一些输出。但出于某种奇怪的原因,我们希望它被一些归档技术压缩,例如 tar,

临时文件是指 tempfile.TemporaryFile() 创建的名称不可见的文件。有任何想法吗?我的第一印象包括一些 tweeking 和类继承.. 有没有更简单的方法?

4

1 回答 1

3

fileobj参数tarfile.open正是为了这个目的:您可以将任何支持写入的类似文件的对象传递给它,并且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您的文件系统并稍后探索其内容。

于 2019-01-10T13:53:45.220 回答