关于python:如何在不提取的情况下遍历包含zip文件的tar.gz文件

How to walk a tar.gz file that contains zip files without extraction

我有一个大的tar.gz文件来使用python脚本进行分析。 tar.gz文件包含许多可能在其中嵌入其他.gz文件的zip文件。 在提取文件之前,我想浏览压缩文件中的目录结构,以查看是否存在某些文件或目录。 通过查看tarfile和zipfile模块,我没有看到任何允许我在tar.gz文件中获取zip文件内容表的现有函数。

感谢您的帮助,


如果不解压缩文件就无法实现。 但是,如果您不想将其提取到磁盘,则无需将其提取到磁盘。 您可以使用tarfile.TarFile.extractfile方法获取类似文件的对象,然后可以将其作为fileobj参数传递给tarfile.open。 例如,给定这些嵌套的tarfiles:

1
2
3
4
5
6
7
$ 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

您可以从内部访问文件,如下所示:

1
2
3
4
5
6
>>> 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.
'

他们只是被提取到记忆中。


我怀疑这是不可能的,你必须手动编程。

.tar.gz文件首先是tar,然后连续使用基本上两个不同的应用程序进行gzip压缩。 要访问tar文件,您可能首先必须取消gzip。

此外,一旦您在解压缩后可以访问tar文件,它就不能很好地进行随机访问。 tar文件中没有列出内容的中央存储库。