我正在尝试设置一个代码来将几个大文件(从数十到数百 GB)打包到一个存档中。tarfile 模块支持的压缩方式对于这么大的数据量有点慢,所以我想使用一些外部压缩模块,如 lz4 来获得更好的压缩速度。不幸的是,我找不到如何创建 tar 文件并使用 lz4 即时压缩它以避免创建临时 tar 文件的方法。tarfile 模块的文档说,有一种方法可以打开未压缩的流以使用 'w|' 进行写入 模式。是将tar文件直接流式传输到lz4模块的方式吗?如果是这样,使用它的正确方法是什么?非常感谢。
1942 次
2 回答
5
根据我们上面的对话。
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
,它会失败。
于 2015-06-15T07:51:18.573 回答
1
tar
您可以将命令的结果直接通过管道传输到该lz4
实用程序。这将避免使用任何中间文件。这是一个示例(假设您同时拥有tar
并lz4
安装在您的系统上):
tar cvf - * | lz4 > mypack.tar.lz4
这里-
告诉从 to 输出tar
结果stdout
。当然,您可以*
使用要 tar 的任何目标更改 tar。
反向操作也是可能的:
lz4 -d mypack.tar.lz4 | tar xv
于 2015-06-28T21:12:53.977 回答