2017-08-09 115 views
0

我在.gz壓縮文件內的多個文件夾中都位於名爲「usa」的主文件夾內。我能夠使用下面的代碼提取單個文件。使用python在主文件夾的文件夾中解壓gz文件

import gzip 
import shutil 
source=r"C:\usauc300.dbf.gz" 
output=r"C:\usauc300.dbf" 
with gzip.open(source,"rb") as f_in, open(output,"wb") as f_out: 
    shutil.copyfileobj(f_in, f_out) 

我已搜查高和低,但無法找到一個等同於命令行選項gzip -dr.....這意味着「解遞歸」,將經過每個文件夾和內容提取到同一位置,同時刪除原壓縮文件。有誰知道我可以如何使用python循環瀏覽文件夾中的文件夾,找到所有壓縮文件並將它們解壓縮到同一位置,同時用壓縮文件替換解壓縮文件?

+0

貌似'gzip'模塊不支持壓縮文件夾。 –

回答

1

我相信這是因爲gzip從不對目錄進行操作,它可以作爲壓縮算法,而不像zip和tar那樣可以壓縮目錄。 python的gzip實現是對文件進行操作。但是,如果我們查看os.walk調用,則目錄樹的遞歸遍歷很容易。

(我沒有測試過這一點)

def gunzip(file_path,output_path): 
    with gzip.open(file_path,"rb") as f_in, open(output_path,"wb") as f_out: 
     shutil.copyfileobj(f_in, f_out) 

def recurse_and_gunzip(root): 
    walker = os.walk(root) 
    for root,dirs,files in walker: 
     for f in files: 
      if fnmatch.fnmatch(f,"*.gz"): 
       gunzip(f,f.replace(".gz","")) 
+0

我認爲他們會是一個批處理實用程序,但這應該很好。 – ketar