使用Python提取(不读取)大型gzip文件

时间:2013-10-23 17:39:08

标签: python shell python-2.7 subprocess

我有一个python脚本,可以自动/协调几个大型gzip文件的传输和处理。我需要能够解压缩它们(比如在shell中运行gunzip file.log.gz),但不需要(或想要)读取它们 - 它们将被传递给另一个需要解压缩文件的命令行工具。

问题是,gzip模块似乎只关心将gzip文件读入python。我已经尝试使用subprocess.Popen来调用文件上的gunzip,但这不起作用,因为我从shell中调用它时出错,或者在shell外调用它时出现任何其他错误(是的,我有尝试在Popen中使用shell = True。

我开始把头发拉出来,因为这应该是一个相对简单的操作,我已经搜索了高低的答案。同样,我不关心将文件的内容读入Python,打开存档并逐行写出太慢(文件大约是6-8GB压缩)。

我在这里缺少什么?

提前致谢。

2 个答案:

答案 0 :(得分:3)

plumbum非常适合您的用例。它使你的python脚本的类似shell的部分更容易处理。

您可以像gunzip一样运行:

from plumbum.cmd import gunzip
gunzip(filename)

如果获取解压缩文件的第二个命令支持从stdin读取(例如,由传统的-参数指示),则可以使用管道,而不是解压缩文件:

from plumbum.cmd import zcat
(zcat[filename] | second_command['-'])()

答案 1 :(得分:0)

archive = tarfile.open(YourGZName, mode='r:gz')
archive.extractall()

由于TarFile支持.gz文件,因此可以愉快地提取它们。