繁体   English   中英

Python zlib膨胀错误

[英]Python zlib inflate error

我正在尝试使用此代码使用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机器上...下载的二进制文件)

我已经阅读了以下链接

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM