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

时间:2015-06-15 06:20:21

标签: python compression tar tarfile

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

2 个答案:

答案 0 :(得分:4)

根据我们上面的谈话。

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,它就会失败。

答案 1 :(得分:1)

您可以将tar命令的结果直接传递给lz4实用程序。这将避免使用任何中间文件。以下是一个示例(假设您的系统上同时安装了tarlz4):

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

此处-告诉您将结果从tar输出到stdout。当然,您可以使用您想要tar的目标更改*

也可以进行相反的操作:

lz4 -d mypack.tar.lz4 | tar xv