我正在使用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 (?)
答案 0 :(得分:5)
一种选择是将其添加为可变长度字符串数据集。
http://code.google.com/p/h5py/wiki/HowTo#Variable-length_strings
E.g:
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]
答案 1 :(得分: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。