2013-10-23 56 views
1

我有一個自動/協調傳輸和處理幾個大的gzip文件的python腳本。我需要能夠解壓縮它們(比如在shell中運行gunzip file.log.gz),但不需要(或者不想)讀取它們 - 它們將被傳遞到另一個需要解壓縮文件的命令行工具。使用Python提取(不讀取)一個大的gzip文件

問題是,gzip模塊似乎只關心讀取gzip文件到python。我曾嘗試使用subprocess.Popen來調用文件上的gunzip,但這不起作用,因爲我沒有從shell中調用它,或者從shell中調用它的任何其他錯誤的錯誤(是的,我有嘗試在Popen中使用shell = True)。

我開始把我的頭髮拉出來,因爲這應該是一個相對簡單的操作,我已經搜索了高和低的答案。再次,我不在乎將文件的內容讀入Python,並且打開存檔並逐行寫入太慢(文件大約壓縮了6-8GB)。

我在這裏錯過了什麼?

在此先感謝。

回答

3

plumbum非常適合您的使用情況。它使你的python腳本的外殼部分更容易處理。

可以運行gunzip,如:

from plumbum.cmd import gunzip 
gunzip(filename) 

如果第二個命令,這需要解壓縮的文件,支持從標準輸入(例如,由傳統的-參數指示)閱讀,你可以使用一個管道,而不是解壓縮文件:

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

此!!!一千謝謝你不僅做到了我所需要的,而且我已經開始將它集成到我的其他代碼中! – user1514979

+0

高興地幫助:) – shx2

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

由於TarFile支持.gz文件,因此它們將快樂地提取它們。

+0

..不是'.gz'文件,不是'.zip'?確切地說,是 – DSM

+0

。此功能適用於.zip文件,但我正在使用GZ文件:-( – user1514979

+0

針對gzip進行了更正 –