我正在尝试设置一个代码,将几个大文件(从几十到几百GB)打包到一个存档中。tarfile模块支持的压缩方法对于这么大的数据量来说有点慢,所以我想使用lz4这样的外部压缩模块来获得更好的压缩速度。不幸的是,我找不到一种方法来创建tar文件并用lz4动态压缩以避免创建临时tar文件。tarfile模块的文档说明,有一种方法可以使用“w |”模式打开未压缩流进行写入。这是直接将tar文件流到lz4模块的方法吗?如果是,正确的使用方法是什么?非常感谢你。
最佳答案
根据我们上面的对话。
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 -
才能提取文件。如果你这么做,它就会失败。