/ / .ZファイルをPythonで解凍する - python、zlib、uncompress

Pythonで.Zファイルを解凍する - python、zlib、uncompress

私はPythonを使って* .Zファイルを解凍しようとしています。 私はそれをFTP(バイナリーモード)でダウンロードしました。このファイルは7zip(ファイルの "info"には "s"型の "s"と表示されています)で正常に解凍されます。 ftp://cddis.gsfc.nasa.gov/gps/products/1860/igr18600.sp3.Z.

私は "Pythonでzlibモジュールを使用することを読み、私が使用しているテストコードをいくつか持っています。

import zlib

comp_data = open("C:Tempigr18600.sp3.Z", "rb").read()

print(comp_data[0:10])

uncomp_data = zlib.decompress(comp_data)
with open("c:tempigr18600.sp3", "wb") as f:
f.write(uncomp_data)
f.close()

これを実行すると、次のような出力が得られます。

b"x1fx9dx90#xc6@x91x01#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は明らかにヘッダが好きではありません。最初の2、3バイトは圧縮ファイルの適切なマジックナンバーシーケンス0x1F9dに一致するようです( https://en.wikipedia.org/wiki/List_of_file_signatures)。

ピンチで、私はこれを回避することができます直接7zipに。しかし、私は純粋なPythonタイプの答えを見つけたいと思っていました。ほとんどの場合、答え(またはこのエラーメッセージ)のためにグーグルで過ごしているにもかかわらず、「運が悪くなっています。おそらく私の検索スキルは萎縮しているのでしょうか。

回答:

回答№1は1

PythonはUnixに相当するものを持っていませんモジュールで解凍できます。これは.Zファイルを解凍するために必要なものです。a)Unixのcompressコマンドにシェルアウトする、b)gzipにシェルアウトする、c)7-zipにシェルアウトする必要があります。 (gzipと7-zipの両方に.Zファイルを解凍する機能があります)、d)Cで元の解凍コードを修正してPythonにリンクする(コードはオンラインで入手可能)、またはe)ネイティブPythonで独自のLZW解凍プログラムを書く。

d)に関しては、私がこの仕事をするために書いたいくつかのCコードを見つけることができます mathematica.stackexchange.comのこの答えに。を参照してください unlzw() 関数。