Файл XML внутри HDF5, h5py - PullRequest
       16

Файл XML внутри HDF5, h5py

4 голосов
/ 13 декабря 2011

Я использую 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 ]

5 голосов
/ 14 декабря 2011

Один из вариантов - добавить его как набор строковых данных переменной длины.

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 голосов
/ 13 декабря 2011

Если вам просто нужно прикрепить файл XML к файлу hdf5, вы можете добавить его в качестве атрибута к файлу hdf5.

xmlfh = open('morphology.xml', 'rb')
h5f.attrs['xml'] = xmlfh.read()

Вы можете получить доступ к XML-файлу, например так:

h5f.attrs['xml']

Также обратите внимание, что вы не можете хранить атрибуты размером более 64 КБ, возможно, вы захотите сжать файл перед прикреплением. Вы можете взглянуть на сжатие библиотек в стандартной библиотеке Python.

Однако это не делает информацию в XML-файле очень доступной. Если вы хотите связать метаданные каждого набора данных с некоторыми метаданными в файле XML, вы можете сопоставить их, как вам нужно, используя библиотеку XML, такую ​​как lxml . Вы также можете добавить каждое поле данных XML в качестве отдельного атрибута, чтобы можно было запрашивать наборы данных по полю XML, все это зависит от того, что у вас есть в файле XML. Попробуйте подумать, как бы вы хотели получить данные позже.

Вы также можете создать группы для каждого XML-файла с его наборами данных и поместить все это в один файл hdf5. Я не знаю, насколько велики файлы, которыми вы управляете, YMMV.

...