我正在尝试使用此代码使用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:] /.. )
无论如何,我一直对此消息失败:
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机器上...下载的二进制文件)
我已阅读以下链接
答案 0 :(得分:2)
答案 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个字节来识别。