4

我正在使用 h5py 分组保存数据(浮点数)。除了数据本身,我还需要在 hdf5.xml 中包含一个附加文件(一个 .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 (?)
4

2 回答 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]
于 2011-12-13T20:55:15.273 回答
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。

于 2011-12-13T19:20:31.287 回答