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

时间:2010-07-20 19:53:03

标签: python

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

感谢您的帮助,

2 个答案:

答案 0 :(得分:5)

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

$ 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'

并且它们只被提取到记忆中。

答案 1 :(得分:1)

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

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

此外,一旦您在取消压缩后访问tar文件,它就不能很好地进行随机访问。 There is no central repository in the tar file that lists the contents.