【问题标题】:Extract a .TAR file within a .gz file在 .gz 文件中提取 .TAR 文件
【发布时间】:2017-12-17 21:46:24
【问题描述】:

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

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 文件中的文件

在我看来,我从根本上做错了什么,但我不知道是什么。

【问题讨论】:

  • 这里还有一些示例 tar 文件。

标签: python tar gzip


【解决方案1】:

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

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

根据documentation。

另外,您需要将内部文件的路径与被检查的目录结合起来,如下所示:

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

【讨论】:

  • @mnu 你是否替换了i 或j 开头的行,因为我犯了一个错误,应该是i。
  • 我把t2 = tarfile.open(j)改成了t2 = tarfile.open(j, 'r:gz')
  • @mnu 我已经在这里测试过了,似乎只要你用r:gz 打开i,你就不再需要内部循环了,因为我相信gz 文件只能包含里面有一个文件,里面的tar在第一时间就被提取出来了。
  • @mnu 好的,原始异常中的问题是文件无法打开。也许您需要将文件名与路径结合起来? t2 = tarfile.open(os.path.join(c, j)) 应该可以解决问题。
  • 我删除了内循环并更改了外循环以打开 i 和 r:gz ,.gz 文件的内容(一个 .TAR 文件和几个 .ASC 文件)是提取。但是,.TAR 文件的内容根本没有被提取出来。我试图使用内部循环进入提取.gz文件内容的目录,并进一步提取同一目录中.TAR文件的内容。如果您想对其进行测试,这是我拥有的两个文件:[drive.google.com/drive/folders/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多