Как пройти файл tar.gz, содержащий zip-файлы без извлечения - PullRequest
3 голосов
/ 20 июля 2010

У меня есть большой файл tar.gz для анализа с использованием скрипта Python.Файл tar.gz содержит несколько zip-файлов, которые могут включать в себя другие файлы .gz.Прежде чем извлечь файл, я хотел бы пройтись по структуре каталогов внутри сжатых файлов, чтобы увидеть, присутствуют ли определенные файлы или каталоги.Глядя на модуль tarfile и zipfile, я не вижу ни одной существующей функции, которая позволила бы мне получить содержание zip-файла в файле tar.gz.

Ответы [ 2 ]

5 голосов
/ 21 июля 2010

Вы не можете получить это без извлечения файла.Однако вам не нужно извлекать его на диск , если вы этого не хотите.Вы можете использовать метод 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'

, и они будут извлечены только в память.

1 голос
/ 20 июля 2010

Я подозреваю, что это невозможно, и вам придется программировать это вручную.

.tar.gz файлы сначала архивируются, а затем распаковываются с тем, что по сути является двумя различными приложениями, последовательно. Чтобы получить доступ к файлу tar, вам, вероятно, придется сначала распаковать его.

Кроме того, если у вас есть доступ к файлу tar после его разархивирования, он не очень хорошо работает с произвольным доступом. В файле tar нет центрального хранилища, в котором содержится содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...