HDF5中的XML文件,h5py

4

我正在使用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 (?)

XML文件有什么用途?之后你会如何使用它的信息? - Danny Navarro
2个回答

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]

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文件中。我不知道您正在处理的文件有多大,因此结果可能会有所不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接