Python zlib膨胀错误

时间:2011-07-28 19:00:51

标签: python compression zlib

我正在尝试使用此代码使用Python来扩展zlib压缩文件:

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 个答案:

答案 0 :(得分:2)

.Z表示LZC / compress个文件。尽管名称相似,但此压缩格式与 gzip 不同,后者是zlib实现的。

尝试使用命令行compress实用程序解压缩文件(您的gzip程序也可以解压缩它。)

答案 1 :(得分:0)

文件扩展名“.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个字节来识别。