2011-12-13 19 views
4

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

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 (?) 
+0

のためのXMLファイルは何ですか?後でその情報をどのように使用しますか? –

答えて

5

可変長文字列データセットとして追加することもできます。

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] 
+0

ありがとう、チャームのように働いた! :) – chaitu

3

あなたはちょうどあなたがHDF5ファイルに属性として追加することができ、HDF5ファイルにXMLファイルを添付する必要がある場合。

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

あなたはこのようにXMLファイルにアクセスすることができます。

h5f.attrs['xml'] 

お知らせ、また、あなたが店が64Kを超える属性がないことを、あなたは、取り付ける前に、ファイルを圧縮することができます。 Pythonの標準ライブラリでライブラリを圧縮することができます。

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

xmlファイルごとにデータセットを含むグループを作成し、すべてを1つのhdf5ファイルに入れることもできます。あなたが管理しているファイルの量がわかりません、YMMV。

関連する問題