一尘不染

使用Python解压缩.Z文件

python

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

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

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显然不喜欢标题。前两个字节似乎与压缩文件的正确魔术数字序列0x1F9d匹配(每个https://en.wikipedia.org/wiki/List_of_file_signatures)。

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


阅读 554

收藏
2021-01-20

共1个答案

一尘不染

Python在模块中没有等效的Unix解压缩功能,这是您解压缩.Z文件所需要的。您可能需要a)外壳到Unix
compress命令,b)外壳到gzip,c)外壳到7-zip(gzip和7-zip都具有解压缩.Z文件的能力),d)修改用C原始的解压缩代码并将其链接到Python(该代码可在线获得),或者e)用本机Python编写自己的LZW解压缩器。

对于d),您可以在mathematica.stackexchange.com的此答案中找到我编写的用于完成此工作的一些C代码。参见unlzw()功能。

2021-01-20