我有一个python脚本,可以自动/协调几个大型gzip文件的传输和处理。我需要能够解压缩它们(比如在shell中运行gunzip file.log.gz
),但不需要(或想要)读取它们 - 它们将被传递给另一个需要解压缩文件的命令行工具。
问题是,gzip模块似乎只关心将gzip文件读入python。我已经尝试使用subprocess.Popen来调用文件上的gunzip,但这不起作用,因为我从shell中调用它时出错,或者在shell外调用它时出现任何其他错误(是的,我有尝试在Popen中使用shell = True。
我开始把头发拉出来,因为这应该是一个相对简单的操作,我已经搜索了高低的答案。同样,我不关心将文件的内容读入Python,打开存档并逐行写出太慢(文件大约是6-8GB压缩)。
我在这里缺少什么?
提前致谢。
答案 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文件,因此可以愉快地提取它们。