tarfile: определить сжатие открытого tarball - PullRequest
1 голос
/ 12 февраля 2010

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

AFAICS TarFile класс не предоставляет общедоступного интерфейса для непосредственного получения необходимой информации. И я хотел бы избежать чтения файла независимо от модуля tarfile.

В настоящее время я рассматриваю поиск класса базового файлового объекта (t.fileobj.__class__) или пытаюсь открыть входной файл во всех возможных режимах и выбрать правильный формат, в зависимости от того, какой из них успешен.

Ответы [ 3 ]

2 голосов
/ 13 февраля 2010

Хорошо, я нашел лучшее решение.

f = t.fileobj.__class__(newfn, 'w')
1 голос
/ 12 февраля 2010

Когда вы открываете tarfile, вы можете выбрать режим. Из документов :

Если режим не подходит для открытия определенного (сжатого) файла для чтения, возникает ошибка ReadError.

Так почему бы не попробовать открыть файл как .gz, .bz2 и т. Д., Перехватывая исключение каждый раз? Тот, который открывается без исключения, сообщает вам тип сжатия, который вы хотите скопировать.

1 голос
/ 12 февраля 2010

Tar не сжимает, он объединяет (именно поэтому TarFile не скажет вам, какой метод сжатия используется, потому что его нет).

Вы пытаетесь выяснить, является ли это tar.gz, tar.bz2 или tar.Z?

...