使用Python提取(而不是读取)大型gzip文件
我有一个python脚本,可以自动/协调几个大型gzip文件的传输和处理。我需要能够解压它们(比如在shell中运行使用Python提取(而不是读取)大型gzip文件,python,shell,python-2.7,subprocess,Python,Shell,Python 2.7,Subprocess,我有一个python脚本,可以自动/协调几个大型gzip文件的传输和处理。我需要能够解压它们(比如在shell中运行gunzip file.log.gz),但不需要(或想要)读入它们——它们将被传递给另一个需要解压文件的命令行工具 问题是,gzip模块似乎只关心将gzip文件读入python。我曾尝试使用subprocess.Popen对文件调用gunzip,但这不起作用,因为我没有从shell调用gunzip会出错,或者在shell外部调用gunzip会出错(是的,我尝试在Popen中使用sh
gunzip file.log.gz
),但不需要(或想要)读入它们——它们将被传递给另一个需要解压文件的命令行工具
问题是,gzip模块似乎只关心将gzip文件读入python。我曾尝试使用subprocess.Popen对文件调用gunzip,但这不起作用,因为我没有从shell调用gunzip会出错,或者在shell外部调用gunzip会出错(是的,我尝试在Popen中使用shell=True)
我开始在这里拔头发,因为这应该是一个相对简单的操作,我已经到处寻找答案。再说一次,我不在乎将文件的内容读入Python,打开归档文件并逐行写入太慢(文件大约压缩了6-8GB)
我错过了什么
提前谢谢
archive = tarfile.open(YourGZName, mode='r:gz')
archive.extractall()
由于TarFile支持.gz文件,这将很好地提取它们 非常适合您的用例。它使python脚本中类似于shell的部分更易于处理
您可以像这样运行gunzip
:
from plumbum.cmd import gunzip
gunzip(filename)
如果第二个命令(获取解压缩文件)支持从stdin读取(例如,由传统的-
参数指示),则可以使用管道,而不是解压缩文件:
from plumbum.cmd import zcat
(zcat[filename] | second_command['-'])()
.. 文件不是
.gz
,不是.zip
?完全正确。此功能适用于.zip文件,但我正在使用GZ文件:-(对我不起作用:tarfile.ReadError:文件无法成功打开
This!!!非常感谢!这不仅完全符合我的需要,而且我已经开始将其集成到我的其余代码中!