2017-08-09 118 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