2017-07-02 71 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