我正在尝试使用Python解开 *.z文件。我通过FTP(二进制模式)下载了它。该文件成功地使用7ZIP取消压缩(文件上的“ info”表示它是类型为“ 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匹配(per )。
在紧要关头,我可以通过直接向7zip弹壳来解决这个问题。但是我希望找到一种纯粹的Python类型的答案。尽管大部分时间都在谷歌搜索答案(或此错误消息),但我并没有太多运气。也许我的搜索技能萎缩了?
I'm trying to uncompress a *.Z file using Python. I downloaded it via FTP (binary mode). The file successfully uncompresses with 7zip (whose "info" on the file says it's of type "Z"). The original file can be found at ftp://cddis.gsfc.nasa.gov/gps/products/1860/igr18600.sp3.Z.
I've read up on the use of the zlib module in Python and have some test code I'm using:
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()
When I execute this I get the following output:
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 clearly doesn't like the header. The first couple of bytes appear to match the proper magic number sequence 0x1F9d for a compressed file (per https://en.wikipedia.org/wiki/List_of_file_signatures).
In a pinch I can work around this by shelling out to 7zip directly. But I was hoping to find a pure Python type of answer. Despite spending most of the day googling for an answer (or this error message) I haven't had much luck. Perhaps my search skills are atrophying?
发布评论
评论(2)
Python在模块中没有可用的Unix Uncompress等效,这是您需要解压缩一个.Z文件的内容。您要么需要a)弹出到unix compress命令,b)shell to Gzip,c)shell to 7-zip(gzip和7-zip都具有解压缩.z文件的能力),d)修改C中的原始Uncompress代码并将其链接到Python(该代码可在线提供),或者e)在本机Python中编写自己的LZW解压缩器。
对于d),您可以找到我写的一些C代码来完成此工作在Mathematica.stackexkexchange.com 。请参阅
unlzw()
函数。Python does not have the equivalent of Unix uncompress available in a module, which is what you'd need to decompress a .Z file. You would either need to a) shell out to the Unix compress command, b) shell out to gzip, c) shell out to 7-zip (both gzip and 7-zip have the ability to decompress .Z files), d) modify the original uncompress code in C and link that to Python (the code is available online), or e) write your own LZW decompressor in native Python.
For d), you can find some C code I wrote to do this job in this answer on mathematica.stackexchange.com. See the
unlzw()
function.几年过去了,现在有python包:
lunlzw
和unlzw3
[1]1)unlzw
.tar.gz
,并且必须安装C型补充器才能使安装正常工作。我尝试过,并且由于安装了C型补充器,因此可以与Cpython 3.8.6一起使用。1.1)安装*
**请参阅上面的ProS/CONS上的注释。
1.2)示例用法
2)unlzw3
2.1)安装
2.2)示例使用
documentation :
附录:
使用文件
igsg1450。 20i.z
从。基准测试表明,对于1000个类似的.z文件,您只需要使用UNLZW等待3.5秒,但使用UNLZW3等待2.8分钟。对于一次性转换,差异可能无关紧要。
[1]所有这些实际上均基于 Mark Adler的答案 Mathematica.stackexchange.com上
Some years have gone by, and now there are python packages for this:
unlzw
andunlzw3
[1]1) unlzw
.tar.gz
, and you'll have to have a C-compiler installed to make the installation to work properly. I tried and since I have a C-compiler installed, got it working with CPython 3.8.6.1.1) Installation*
*See the note on Pros/Cons above.
1.2) Example usage
2) unlzw3
2.1) Installation
2.2) Example usage
From the documentation:
Appendix: Benchmarks
Using a file
igsg1450.20i.Z
downloaded from https://cddis.nasa.gov/archive/gnss/products/ionex/2020/145/.The benchmarks show, that for 1000 similar .Z files you would have to wait only 3.5 seconds with unlzw, but 2.8 minutes with unlzw3. For one-off conversion, the difference probably does not matter.
[1] All of these are actually based on the Mark Adler's answer on mathematica.stackexchange.com