2011-07-28 42 views
0

私はこのコードではPythonを使用してzlib圧縮ファイルに膨張しようとしています:Pythonのzlibを膨らまエラー

  • 第二の追加:私はすでに別のオプションを使用して、いくつかの試みを行ってきた

    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ビットにベースコード化します。

とにかく、私はこのメッセージで失敗し続ける:唯一の違いはzlib.decompressに負のパラメータを使用している

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 

:無効なブロックタイプを。

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、私はファイルがダウンロードmachine..binaryのUnixであることを推測する)

私はすでに次のリンク

+2

ファイルは[ファイル(1) '](http://linux.die.net/man/1/file)とは何ですか?それは "gzip圧縮データ"ですか? –

+0

いいえ、Unix圧縮ファイルです。 – jpaulini

答えて

0

ファイル拡張子 '.Z'とこれまでに試した試行は、間違ったzLibを使用している(ただし、投稿されたリンクによれば正しい)か、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 

この意志

あなたはファイル内のzlibストリーム(複数可)の位置を検出するためのファイルと私のツールPrecompを使用することができますストリームの位置と使用する(破棄する)windowbitsパラメータの両方を教えてください。

phihagと書いてあるように、deflate/zLibとは異なるファイルで圧縮されている可能性があるため、ファイル内にzLibストリームがあるかどうかもわかります。この場合、おそらくzLibヘッダーのサイズが2バイトにすぎないので誤検出があるかもしれませんが、それは< 100バイトに解凍して識別できます。

+0

可能なzLib-Stream(スローモード)は、位置4524、ウィンドウビット= 13にあります。 3バイトに解凍可能 スキップして32バイト未満です。 位置11760、ウィンドウビット= 12にzLib-Stream(低速モード)が検出される可能性があります。 9バイトに解凍可能 スキップして32バイト未満です。 可能なzLib-Stream(スローモード)は、21507の位置、windowbits = 9にあります。 – jpaulini

+0

ご協力ありがとうございます。私はプリコンパイルをダウンロードしましたが、ウィンドウビットを見ると9,13,8,12,15 ...私はそれが何を意味するのか実際にはわかりません...(ログはこのコメントの上にあります。私は誤ってコメントを終了する前にEnterを押しました..) – jpaulini

+0

これは私が言及した誤検出のようです。それにdeflate/zLibストリームはなく、zLibを使用して解凍することはできません。あなたはphihagの答えを受け入れ、LZC/compressを解凍するツール/ライブラリを探すべきです。 – schnaader

2

.Zは、LZC/compressを示します。名前の類似性にもかかわらず、この圧縮形式はgzipと異なり、zlibが実装しています。

コマンドラインcompressユーティリティを使用して、ファイルを解凍してみてください(gzipプログラムも解凍できる可能性があります)。

+1

zlib(ライブラリ)は、DEFLATEのラッパーであるRFC 1951 *および* gzip(RFC 1952)で定義されているDEFLATE(データ形式)を実装しています。また、zlibにはDEFLATEコンテナでもあるデータ形式(RFC 1950)があります。 zlibライブラリ*も* zlibにデータフォーマットを実装します。まだ混乱していますか? ;-) – Cameron

関連する問題