2017-08-28 13 views
0

大量の圧縮HDFファイルがあります。Python:圧縮されていないファイル(.gz)を読み書きせずに読み込みます。

file1.HDF.gz 
file2.HDF.gz 
file3.HDF.gz 
... 

私は、次のような方法

from pyhdf.SD import SD, SDC 
import os 

os.system('gunzip <file1.HDF.gz> file1.HDF') 
HDF = SD('file1.HDF') 

で圧縮されていないHDFファイルを読み込むと、ファイルごとにこれを繰り返すことができます。しかし、これは私が望むよりも時間がかかります。

私は、ほとんどの時間オーバーハングが圧縮されたファイルを新しい非圧縮バージョンに書き込むことから来ていると考えています。そして、ファイルの非圧縮バージョンをSDは1ステップで機能します。

私はこの考え方で正しいですか?もしそうなら、私がしたいことをする方法がありますか?

+0

厄介です。正しい使い方は、hdf内の透過的な圧縮です(したがって、書き込みと読み取りの間に気にする必要はありません)!あなたが説明するこの設定は、アーカイブのみで使用できます(圧縮はextra-layer hdfが知らないためです)。あなたはユースケースを指定しませんでしたが、いくつかのケースでは(これらの中から多くの反復を読みたいと思っています):圧縮を使用してそれぞれを新しいhdfに変換します(またはメモリに問題がなければ復元するだけです)。 **備考** pythonは、ファイルベースのパイプラインなしで多くの圧縮解除ツールもサポートしています。 – sascha

+0

pyhdfの詳細を見てみるとよいでしょう。Pythonでgzip形式のストリームに対応するファイルのようなオブジェクトを取得できますが、ファイルのようなオブジェクトがあるかどうかを知る必要がありますpyhdfライブラリが実際のファイルを必要とする場合(または、ファイル自体を開くことができるようにファイル名が悪い場合) –

+0

(実際にファイル名が必要な場合でも、pyhdfが入力ファイルをシーク可能にする必要がない場合は、* FIFOを使ってトリックを再生することができますが、それはもう少しの調査ですライブラリの実装)。 –

答えて

3

pyhdf package documentationによると、これは不可能です。

__init__(self, path, mode=1) 
    SD constructor. Initialize an SD interface on an HDF file, 
    creating the file if necessary. 

ファイルのようなオブジェクトをとるSDオブジェクトをインスタンス化する方法は他にありません。これは、外部インターフェイス(NCSA HDF)に準拠している可能性が高いためです。また、HDF形式では、大量のファイルを処理して、一度にメモリに格納することは実用的ではありません。

ファイルとして解凍するのが最も効果的です。

あなたはgzipのモジュール(docs)を使用し、Pythonで滞在を希望の場合:

import gzip 
import shutil 
with gzip.open('file1.HDF.gz', 'wb') as f_in, open('file1.HDF', 'rb') as f_out: 
    shutil.copyfileobj(f_in, f_out) 
0

サシャは、透明な圧縮をHDF正しいですあなたはHDFファイルが保存されている方法を制御することはできませんそれにもかかわらず場合は、それは、これらのファイルからデータを取得することができgzipのpython modulue (docs)を探している、gzippingよりも適切です。

+0

この場合、gzipモジュールの使い方の例を教えていただけますか? – hm8

+0

@ hm8公式ドキュメントの何が問題なのですか? – sascha

+0

答えは、質問に*答えることが期待されます。答えを見つけることができる場所に誰かを指さないでください。リンクは、補足的でなければならない。 –

関連する問題