【问题标题】:An XML file inside HDF5, h5pyHDF5、h5py 中的 XML 文件
【发布时间】:2012-01-19 13:40:57
【问题描述】:

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

【问题讨论】:

  • XML 文件有什么用?以后你将如何使用它的信息?

标签: python hdf5 h5py


【解决方案1】:

一种选择是将其添加为可变长度的字符串数据集。

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]

【讨论】:

    【解决方案2】:

    如果只需要将 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。

    【讨论】:

      猜你喜欢
      • 2014-12-24
      • 2020-08-19
      • 1970-01-01
      • 2015-09-17
      • 2015-08-30
      • 2015-04-09
      • 2011-12-02
      • 2020-06-12
      • 2016-03-29
      相关资源
      最近更新 更多