2017-08-09 14 views
0

"usa"というメインフォルダ内にある複数のフォルダ内に.gz圧縮ファイルがあります。以下のコードを使用して個々のファイルを抽出することができました。メインフォルダ内のフォルダ内のgzファイルをpythonで解凍します

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.....に相当するものを見つけることができませんzipファイル誰も私がどのようにフォルダ内のフォルダを介してループをPythonを使用することができます知っている任意の圧縮ファイルを見つけて、同じ場所に圧縮解除されたファイルと解凍されたファイルを置き換えてそれらを解凍?

+0

が見えます。 –

答えて

1

gzipはディレクトリを操作しないので、ディレクトリを圧縮できるzipやtarとは異なり、圧縮アルゴリズムとして機能します。 pythonのgzipの実装は、ファイルを操作することです。しかし、os.walk呼び出しを見ると、ディレクトリツリーの再帰的なトラバーサルは簡単です。

(私はこれをテストしていません) `gzip`モジュールは、圧縮フォルダをサポートしていないよう

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

関連する問題