Python ZLIB ошибка надувать - PullRequest
0 голосов
/ 28 июля 2011

Я пытаюсь надуть zlib сжатый файл, используя Python, с помощью этого кода:

import zlib

data = open("3B42.110531.21.6A.HDF.Z", 'rb').read()
inflated = zlib.decompress(data)
f = open('3B42.110531.21.6A.HDF', 'wb')
f.write(inflated)
f.close()

Я уже сделал несколько попыток с различными параметрами:

  • Добавление второго параметра к zlib.decompress (zlib.decompress(data,-15))
  • Пропуск первых двух байтов zlib.decompress(data[2:-4]) / zlib.decompress(data[2:] /.. )
  • Базовое кодирование до 64 бит.

В любом случае, я продолжаю терпеть неудачу с этим сообщением:

    Traceback (most recent call last):
  File "C:\opt\Python25\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "E:\Tesis\data\uncompress.py", line 6, in <module>
    inflated = zlib.decompress(data)
error: Error -3 while decompressing data: incorrect header check

Единственное отличие заключается в использовании отрицательного параметра в zlib.decompress: неверный тип блока.

import zlib

data = open("3B42.110531.21.6A.HDF.Z", 'rb').read()
inflated = zlib.decompress(data,-15)
f = open('3B42.110531.21.6A.HDF', 'wb')
f.write(inflated)
f.close()


Traceback (most recent call last):
  File "C:\opt\Python25\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "E:\Tesis\data\uncompress.py", line 6, in <module>
    inflated = zlib.decompress(data,-15)
error: Error -3 while decompressing data: invalid block type

Я уверен, что файл не поврежден, я могу открытьэто из WinRAR.(среда: Windows x64, Python 2.5, я полагаю, что файл находится на Unix-машине .. бинарная загрузка)

Я уже прочитал следующие ссылки

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

.Z указывает файл LZC / compress. Несмотря на сходство имен, этот формат сжатия отличается от gzip , который zlib реализует.

Попробуйте использовать утилиту командной строки compress для распаковки файла (ваша программа gzip может также распаковать его).

0 голосов
/ 28 июля 2011

Расширение файла '.Z' и попытки, которые вы пробовали до сих пор, звучат так, будто вы либо используете zLib неправильно (но это кажется правильным в соответствии с вашими опубликованными ссылками), либо поток zLib находится не в самом начале файла.

Вы можете использовать мой инструмент Precomp с файлом для определения положения потоков zLib внутри файла:

precomp -v -slow 3B42.110531.21.6A.HDF.Z

Это должно вывести что-то вроде этого:

Possible zLib-Stream (slow mode) found at position 85, windowbits = 15
Can be decompressed to 9264 bytes

Это сообщит вам как о позиции потока, так и о параметре windowbits, который нужно использовать (отрицается).

Он также сообщит вам, есть ли в файле потоки zLib вообще, потому что, как сказал phihag , возможно, что файл сжат чем-то отличным от deflate / zLib. Обратите внимание, что в этом случае, вероятно, будут некоторые ошибочные определения, поскольку заголовок zLib имеет размер только 2 байта, но их можно определить, распаковав до <100 байтов. </p>

...