2017-07-02 47 views
0

のために動作しません。私はすべてのタールを抽出するためにPythonで小さなスクリプトを書きたいtarファイルが.gzというファイル

tarfile.tar.gz 
--tar1.gz 
    --tar1.txt 
--tar2.gz 
--tar3.gz 

の形でネストされたtarファイルを持っているフォルダと同じ順番にして最初の横幅すなわちtar1.txtは/ tarファイル/ TAR1に

をあるべきここでのスクリプトは、

#!/usr/bin/python 

import os 
import re 
import tarfile 

data = os.path.join(os.getcwd(), 'data') 
dirs = [data] 

while len(dirs): 
    dirpath = dirs.pop(0) 
    for subpath in os.listdir(dirpath): 
     if not re.search('(.tar)?.gz$', subpath): 
      continue 
     with tarfile.open(os.path.join(dirpath, subpath)) as tarf: 
      tarf.extractall(path=dirpath) 
    for subpath in os.listdir(dirpath): 
     newpath = os.path.join(dirpath, subpath) 
     if os.path.isdir(newpath): 
      dirs.append(newpath) 
     elif dirpath != data or os.path.islink(newpath): 
      os.remove(newpath) 

だが、私は、スクリプトを実行するとき、私は次のエラーを取得する:

Traceback (most recent call last): 
    File "./extract.py", line 16, in <module> 
    with tarfile.open(os.path.join(dirpath, subpath)) as tarf: 
    File "/usr/lib/python2.7/tarfile.py", line 1678, in open 
    raise ReadError("file could not be opened successfully") 
tarfile.ReadError: file could not be opened successfully 

'.tar.gz'ファイルは正しく抽出されますが、ネストされた '.gz'ファイルは抽出されません。ここに何がありますか? tarfileモジュールは.gzファイルを処理しませんか?

答えて

0

.gzは、ファイルがgzippedであることを示します。 .tar.gzは、gzipされたtarファイルを意味します。 tarfileはgzipped tarsを完璧に扱いますが、(tar1.gzのように)tarアーカイブではないファイルは扱いません。

+1

IOWでは、 '.tar.gz'を扱うのは単なる便宜です。 gzipされたファイルを読みたいなら、 'gzip'モジュールを使う必要があります。 –

+0

右ありがとう、私はこれを読む必要があります。 – abhipil