Python 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位的Base编码。
但是我还是失败了,收到这个错误信息:
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 个回答
1
文件扩展名 '.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 字节来识别。