Python zlib输入

2024-05-18 23:31:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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机器中..二进制文件已下载)

我已经阅读了以下链接


Tags: 文件inpyimportreaddatalineopen
2条回答

.Z表示一个LZC/^{}文件。尽管名称相似,但这种压缩格式不同于zlib实现的gzip

尝试使用命令行^{}实用程序来解压缩文件(您的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字节来识别这些错误。

相关问题 更多 >

    热门问题