如何在不解压的情况下查看包含zip文件的tar.gz文件
我有一个很大的 tar.gz 文件,想用一个 Python 脚本来分析它。这个 tar.gz 文件里面包含了好几个 zip 文件,而这些 zip 文件里可能还嵌套着其他的 .gz 文件。在解压之前,我想先浏览一下这些压缩文件里的目录结构,看看里面有没有我需要的某些文件或文件夹。不过,我查了一下 tarfile 和 zipfile 这两个模块,发现没有现成的函数可以让我查看 tar.gz 文件中 zip 文件的内容。
感谢你的帮助,
2 个回答
1
我觉得这可能不太行,你可能需要手动编程来实现。
.tar.gz 文件是先用一个叫 tar 的工具打包,然后再用另一个叫 gzip 的工具压缩的,实际上是两个不同的程序依次处理的。要访问这个 tar 文件,你可能得先解压 gzip。
而且,一旦你解压了 gzip,拿到了 tar 文件,它在随机访问方面表现得也不好。在 tar 文件里,没有一个中心的地方能列出里面的内容。
6
你不能直接访问里面的内容,必须先提取文件。不过,如果你不想把它提取到硬盘上,也可以。你可以使用tarfile.TarFile.extractfile
这个方法来获取一个类似文件的对象,然后把这个对象传给tarfile.open
,作为fileobj
参数。比如,假设有这些嵌套的tar文件:
$ cat bar/baz.txt
This is bar/baz.txt.
$ tar cvfz bar.tgz bar
bar/
bar/baz.txt
$ tar cvfz baz.tgz bar.tgz
bar.tgz
你可以这样访问里面的文件:
>>> import tarfile
>>> baz = tarfile.open('baz.tgz')
>>> bar = tarfile.open(fileobj=baz.extractfile('bar.tgz'))
>>> bar.extractfile('bar/baz.txt').read()
'This is bar/baz.txt.\n'
而且这些文件只会被提取到内存中。