假设我们有一个临时文件,我们可以向其中写入一些输出。但出于某种奇怪的原因,我们希望它被一些归档技术压缩,例如 tar,
临时文件是指 tempfile.TemporaryFile() 创建的名称不可见的文件。有任何想法吗?我的第一印象包括一些 tweeking 和类继承.. 有没有更简单的方法?
假设我们有一个临时文件,我们可以向其中写入一些输出。但出于某种奇怪的原因,我们希望它被一些归档技术压缩,例如 tar,
临时文件是指 tempfile.TemporaryFile() 创建的名称不可见的文件。有任何想法吗?我的第一印象包括一些 tweeking 和类继承.. 有没有更简单的方法?
的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
您的文件系统并稍后探索其内容。