У меня есть тарболл, что я не могу открыть с помощью питона:питон tarfile.py «файл не может быть открыт успешно»
>>> import tarfile
>>> tarfile.open('/tmp/bad.tar.gz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "tarfile.py", line 1672, in open
raise ReadError("file could not be opened successfully")
tarfile.ReadError: file could not be opened successfully
, но я в состоянии извлечь файл без проблем по команде линия.
$ tar -xzvf /tmp/bad.tar.gz
Я проследил питона tarfile
кода, и есть функция «nti
», где они преобразующие байт. Он получает по этой линии:
obj.uid = nti(buf[108:116])
и взрывается. Эти биты (для UID) проходят через восемь пробелов. Не знаете, куда идти отсюда ...
Так архивный файл был поврежден? Имея не-числа в смещениях 108 до 116 дисквалифицирует его от дегтя файл. –
@EugeneK * пожав плечами * Если мы меняем определение «коррумпированного» на «делает ли« tar »открытым файл?», тогда нет, он не был поврежден. :-) – inanutshellus
@EugeneK Я полностью с вами, хотя с точки зрения того, что python, скорее всего, следует за спецификацией, и этот файл не вел себя правильно. С другой стороны ... если у вас нет битов UID и GID? должно ли это означать, что питон должен * фатально * урод? Похоже на чрезмерную реакцию. – inanutshellus