4

グループでデータ(浮動小数点数)を保存するためにh5pyを使用しています。データ自体に加えて、追加のファイル (必要な情報を含む .xml ファイル) を hdf5 内に含める必要があります。どうすればいいですか?私のアプローチは間違っていますか?

f = h5py.File('filename.h5')
f.create_dataset('/data/1',numpy_array_1)
f.create_dataset('/data/2',numpy_array_2)
.
.

私のh5ツリーは次のようになります。

/ 
/data
/data/1 (numpy_array_1)
/data/2 (numpy_array_2)
.
.
/morphology.xml (?)
4

2 に答える 2

5

1 つのオプションは、可変長の文字列データセットとして追加することです。

http://code.google.com/p/h5py/wiki/HowTo#Variable-length_strings

例えば:

import h5py
xmldata = """<xml>
<something>
    <else>Text</else>
</something>
</xml>
"""

# Write the xml file...
f = h5py.File('test.hdf5', 'w')
str_type = h5py.new_vlen(str)
ds = f.create_dataset('something.xml', shape=(1,), dtype=str_type)
ds[:] = xmldata
f.close()

# Read the xml file back...
f = h5py.File('test.hdf5', 'r')
print f['something.xml'][0]
于 2011-12-13T20:55:15.273 に答える
3

XML ファイルを hdf5 ファイルに添付するだけの場合は、それを属性として hdf5 ファイルに追加できます。

xmlfh = open('morphology.xml', 'rb')
h5f.attrs['xml'] = xmlfh.read()

次のように xml ファイルにアクセスできます。

h5f.attrs['xml']

また、64K を超える属性は保存できないことに注意してください。添付する前にファイルを圧縮することをお勧めします。Python の標準ライブラリでライブラリの圧縮を確認できます。

ただし、これでは XML ファイル内の情報にアクセスしやすくなりません。各データセットのメタデータを XML ファイル内のメタデータに関連付ける場合は、必要に応じてlxmlなどの XML ライブラリを使用してマッピングできます。また、XML データの各フィールドを個別の属性として追加して、XML フィールドでデータセットをクエリできるようにすることもできます。これはすべて、XML ファイルの内容によって異なります。後でデータを取得する方法について考えてみてください。

データセットを含む各 xml ファイルのグループを作成し、すべてを単一の hdf5 ファイルに入れることもできます。YMMV さんが管理しているファイルのサイズはわかりません。

于 2011-12-13T19:20:31.287 に答える