python - 使用 Python 解压缩 .Z 文件

标签 python zlib compression

我正在尝试使用 Python 解压缩 *.Z 文件。我通过 FTP(二进制模式)下载了它。该文件使用 7zip 成功解压缩(文件上的“信息”表明它是“Z”类型)。原始文件可以在 ftp://cddis.gsfc.nasa.gov/gps/products/1860/igr18600.sp3.Z 找到.

我已经阅读了 zlib 模块在 Python 中的使用,并且有一些我正在使用的测试代码:

import zlib

comp_data = open('C:\Temp\igr18600.sp3.Z', 'rb').read()

print(comp_data[0:10])

uncomp_data = zlib.decompress(comp_data)
with open('c:\temp\igr18600.sp3', 'wb') as f:
    f.write(uncomp_data)
    f.close()

当我执行此操作时,我得到以下输出:

b'\x1f\x9d\x90#\xc6@\x91\x01#F'
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    uncomp_data = zlib.decompress(comp_data)
zlib.error: Error -3 while decompressing data: incorrect header check

zlib 显然不喜欢标题。前几个字节似乎与压缩文件的正确魔数(Magic Number)序列 0x1F9d 匹配(根据 https://en.wikipedia.org/wiki/List_of_file_signatures )。

在紧要关头,我可以通过直接输出到 7zip 来解决这个问题。但我希望找到一个纯 Python 类型的答案。尽管一天中的大部分时间都在谷歌上搜索答案(或此错误消息),但我运气不佳。也许我的搜索技能正在萎缩?

最佳答案

Python 在模块中没有 Unix 解压缩的等效项,而这是解压缩 .Z 文件所需要的。您可能需要 a) shell out 到 Unix compress 命令,b) shell out 到 gzip,c) shell out 到 7-zip(gzip 和 7-zip 都能够解压缩 .Z 文件),d) 修改C 中的原始解压缩代码并将其链接到 Python(代码可在线获取),或者 e) 用 native Python 编写您自己的 LZW 解压缩程序。

对于 d),您可以找到我编写的一些 C 代码来完成这项工作 in this answer on mathematica.stackexchange.com .请参阅 unlzw() 函数。

关于python - 使用 Python 解压缩 .Z 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32921263/

相关文章:

python - 如何将任何数字四舍五入到最接近的 5 的倍数?

python - Vim:警告:不输出到终端

python - 使用导入的模块来引用嵌套模块

c++ - 读取zlib/miniz压缩数据时出现DATA_ERROR

java - 里面有多个文件的 gzip 存档

c++ - 我将如何使用 C/C++ 等语言创建类似于 ZIP 存档的文件压缩器?

javascript - 无法通过命令行授权 GoogleCL

zlib - DEFLATE (zlib, gzip) 格式使用的编码动态霍夫曼树的最大大小是多少?

zlib - 在 gzip 库中, 'uncompress' 和 'gzopen' 有什么区别?

javascript - Google Maps API v3 - API 脚本压缩/混淆