Python:如何使用tarfile模块中不可用的不同压缩方法,创建tar文件并使用外部模块动态压缩它? - python

我正在尝试建立一个代码,将几个大文件(从几十到几百GB)打包到一个档案中。对于如此大量的数据,tarfile模块中支持的压缩方法有些慢,因此我想使用一些外部压缩模块(例如lz4)来获得更好的压缩速度。不幸的是,我找不到一种方法来创建tar文件并即时使用lz4压缩它,以避免创建临时tar文件。 tarfile模块的文档说,有一种方法可以打开未压缩的流以使用'w |'进行写入。模式。是否可以将tar文件直接流式传输到lz4模块?如果是这样,使用它的正确方法是什么?非常感谢你。

python大神给出的解决方案

根据我们上面的谈话。

import tarfile
import subprocess

p = subprocess.Popen(['lz4', '-'], stdin=subprocess.PIPE)

tar = tarfile.open(fileobj=p.stdin, mode="w|")

从那里您可以执行通常的tar.addfile。仅供参考:正如我在对话中所说。 GNU tar可以自动检测gz和bz2,但不能自动检测lz4。请注意。因此,您必须执行lz4 -c -d stdin.lz4 | tar xf -提取文件。如果仅执行tar xf,它将失败。