3

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

4

2 回答 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实用程序。这将避免使用任何中间文件。这是一个示例(假设您同时拥有tarlz4安装在您的系统上):

tar cvf - * | lz4 > mypack.tar.lz4

这里-告诉从 to 输出tar结果stdout。当然,您可以*使用要 tar 的任何目标更改 tar。

反向操作也是可能的:

lz4 -d mypack.tar.lz4 | tar xv

于 2015-06-28T21:12:53.977 回答