2

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

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

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

我在这里想念什么?

提前致谢。

4

2 回答 2

3

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

你可以gunzip像这样运行:

from plumbum.cmd import gunzip
gunzip(filename)

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

from plumbum.cmd import zcat
(zcat[filename] | second_command['-'])()
于 2013-10-23T17:43:43.570 回答
0
archive = tarfile.open(YourGZName, mode='r:gz')
archive.extractall()

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

于 2013-10-23T17:42:37.553 回答