HDF5中的XML文件,h5py
我正在使用h5py来保存数据(浮点数),并且是以组的方式保存。除了数据本身,我还需要在hdf5文件中包含一个额外的文件(一个.xml文件,里面包含必要的信息)。我该怎么做呢?我的做法是否有问题?
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 (?)
2 个回答
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文件里。我不知道你正在处理的文件有多大,具体情况可能会有所不同。
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]