Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python提取(而不是读取)大型gzip文件_Python_Shell_Python 2.7_Subprocess - Fatal编程技术网

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

使用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

我有一个python脚本,可以自动/协调几个大型gzip文件的传输和处理。我需要能够解压它们(比如在shell中运行
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!!!非常感谢!这不仅完全符合我的需要,而且我已经开始将其集成到我的其余代码中!