2013-05-20 4 views
5

私のpythonコードは、hdf5ファイルのバイトを表すバイト配列を受け取ります。h5pyはメモリ内のバイト配列からファイルをロードできますか?

私はこのバイト配列をディスクに最初に書き込むことなく、メモリ内のh5pyファイルオブジェクトに読み込みたいと思います。 This pageは、私はメモリマップされたファイルを開くことができますが、それは新しい、空のファイルになると言います。私はバイト配列からメモリ内のhdf5ファイルに行き、使用し、破棄し、いつでもディスクに書き込まないようにしたい。

h5pyでこれを行うことはできますか? (またはCを使用してHDF5を持つことが唯一の方法である場合)

+1

私は同じことをやろうとしています。働いていたソリューションでいくつかのコードを表示できますか?ありがとう! – konus

+0

解決策を見つけてここに投稿しました:https://stackoverflow.com/questions/11588630/pass-hdf5-file-to-h5py-as-binary-blob-string/45900556#45900556 – SCGH

答えて

-3

あなたはFileオブジェクトを作成し、h5pyを経由して、それを読むためにBinary I/Oを使用するように試みることができる:

f = io.BytesIO(YOUR_H5PY_STREAM) 
h = h5py.File(f,'r') 
+0

ありがとう、これは私は必要 – mahonya

+0

この解決策は動作しません。以下のコメントを参照してください。 –

+0

このソリューションが動作するコードを共有できますか? –

1

私も本当にできるようにしたいと思います既存のpythonファイルオブジェクトのように、メモリ内のデータからh5py.Fileオブジェクトを作成しますが、h5py.Fileが引数としてファイルオブジェクトを受け入れるという表示はありません。

>>> f = io.BytesIO(open('test.h5').read()) 
>>> h5py.File(f, 'r') 
AttributeError: '_io.BytesIO' object has no attribute 'encode' 

h5py.File(open( 'test.h5')、 'r')も同様のエラーを示します。私はまた、新しいメモリマップのhdf5ファイルを開く方法がなく、バイトストリームをそこにダンプすることもできません。

+0

これにはどんな解決策が見つかりましたか? – konus

+1

該当する解が見つかりませんでした。余分なディスクI/Oなしでtar.gzアーカイブからhd5ファイルを読み込もうとしていましたが、一時ファイルを書き出しました。あなたはこれをUNIXのFIFOファイルとスレッド/フォークを使ってハックできるかもしれませんが、私はそれを試しませんでした。 – lindyblackburn

関連する問題