2017-07-02 80 views
0

我在tar文件沒有爲.gz文件解

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

形式的嵌套tar文件,我想用Python寫一個小腳本提取所有焦油廣度優先的文件夾相同的順序工作即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表示該文件是gzip; .tar.gz表示已經被壓縮的tar文件。 tarfile完美地處理gzipped tars,但它不處理非tar歸檔文件(如tar1.gz)。

+1

IOW,處理'.tar.gz'只是一種方便。如果你想讀gzip文件,你必須使用'gzip'模塊。 –

+0

對!謝謝,我需要閱讀這個。 – abhipil