tarfile不适用于.gz文件

时间:2017-07-02 20:29:08

标签: python tarfile

我有一个

形式的嵌套tarfile
tarfile.tar.gz
--tar1.gz
  --tar1.txt
--tar2.gz
--tar3.gz

我想在python中编写一个小脚本,将所有tars广度提取到相同的文件夹顺序,即tar1.txt应位于tarfile / 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文件吗?

1 个答案:

答案 0 :(得分:0)

.gz表示该文件是gzip压缩的; .tar.gz表示已经gzip压缩的tar文件。 tarfile可以很好地处理gzip tars,但它不会处理不是tar档案的文件(比如你的tar1.gz)。