在.gz文件中提取.TAR文件

时间:2017-12-17 21:46:25

标签: python tar gz

我必须解压缩目录中的五十个* .gz文件。在每个* .gz文件中都有一个* .TAR文件和一些其他文件。 我正在尝试一个python脚本,它将* .gz文件的内容提取到一个目录中。但是,我无法在提取* .gz内容的同一目录中提取* .TAR文件。 这是脚本的外观:

import tarfile
import os
import glob
basedir = "path_to _dir"
for i in glob.glob(basedir +"*.gz"):
  a = os.path.basename(i)
  b = os.path.splitext(a)[0]
  c = os.path.splitext(b)[0]
  os.mkdir(os.path.join(basedir,c))
  t1 = tarfile.open(i)
  t1.extractall(c)
     for j in os.listdir(c):
       if j.endswith('.TAR'):
       print(j)
       t2 = tarfile.open(j)
       t2.extractall()
       t2.close() 
  t1.close()

它给了我错误:

 Traceback (most recent call last):
  File "./untar.py", line 16, in <module>
    t2 = tarfile.open(j)
  File "/usr/lib64/python2.7/tarfile.py", line 1660, in open
    return func(name, "r", fileobj, **kwargs)
  File "/usr/lib64/python2.7/tarfile.py", line 1722, in gzopen
    fileobj = bltn_open(name, mode + "b")
IOError: [Errno 2] No such file or directory: '0299_0108060501.TAR'

0299_0108060501.TAR是* .gz文件中包含的文件

在我看来,我从根本上做了一些非常错误的事情,但我不知道是什么。

1 个答案:

答案 0 :(得分:2)

由于tar.gz文件是使用gzip压缩的TAR压缩文件,因此应使用

t1 = tarfile.open(i, 'r:gz')

根据documentation

此外,您需要将内部文件的路径与正在检查的目录组合在一起,如下所示:

t2 = tarfile.open(os.path.join(c, j))