2011-12-13 101 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文件?你以後如何使用它的信息? – 2011-12-13 18:38:31

回答

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 2011-12-14 04:36:01

3

如果你只需要在XML文件附加到HDF5文件,你可以將其添加爲到HDF5文件的屬性。

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

您可以訪問XML文件,然後像這樣:

h5f.attrs['xml'] 

通知,也可以不存儲屬性大於64K,您可能需要安裝前將文件壓縮。你可以看看在標準的Python庫中壓縮庫。

但是,這不會使XML文件中的信息非常容易訪問。如果要將每個數據集的元數據與XML文件中的某些元數據相關聯,則可以根據需要使用XML庫(如lxml)將其映射。您還可以將XML數據的每個字段作爲單獨的屬性添加,以便您可以通過XML字段查詢數據集,這完全取決於您在XML文件中的內容。試着想想以後如何檢索數據。

您可能還希望爲每個xml文件及其數據集創建組,並將其放在一個hdf5文件中。我不知道你管理的文件有多大,YMMV。