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

Tre*_*ers 3 python compression tar tarfile

我正在尝试设置一个代码来将几个大文件(从数十到数百 GB)打包到一个存档中。tarfile 模块支持的压缩方法对于这么大的数据量来说有点慢,所以我想使用一些像 lz4 这样的外部压缩模块来实现更好的压缩速度。不幸的是,我找不到如何创建 tar 文件并使用 lz4 动态压缩它以避免创建临时 tar 文件的方法。tarfile 模块的文档说有一种方法可以使用“w|”打开未压缩的流进行写入 模式。这是将tar文件直接流式传输到lz4模块的方法吗?如果是这样,使用它的正确方法是什么?非常感谢。

Ken*_*chi 5

根据我们上面的对话。

import tarfile
import subprocess

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

tar = tarfile.open(fileobj=p.stdin, mode="w|")
Run Code Online (Sandbox Code Playgroud)

从那里你可以做通常的tar.addfile。仅供参考:正如我在谈话中所说的。GNU tar 可以自动检测 gz 和 bz2 但不能自动检测 lz4。只是一个注释。所以你必须做lz4 -c -d stdin.lz4 | tar xf -提取文件。如果你只是这样做,tar xf它就会失败。