Как читать файлы HDF5, содержащие только наборы данных (без групп), с помощью h5py?

У меня есть файлы HDF5, которые я хотел бы открыть с помощью модуля Python h5py (в Python 2.7).

Это просто, когда у меня есть файл с группами и наборами данных:

import h5py as hdf

with hdf.File(relative_path_to_file, 'r') as f:
    my_data = f['a_group']['a_dataset'].value

Однако в моей нынешней ситуации у меня нет групп. Есть только наборы данных. К сожалению, я не могу получить доступ к своим данным, что бы я ни пытался. Ни одно из следующих действий не работает (все прерываются с KeyErrors или ValueErrors):

my_data = f['a_dataset'].value #KeyError

my_data = f['/a_dataset'].value #KeyError

my_data = f['/']['a_dataset'].value #KeyError

my_data = f['']['a_dataset'].value #ValueError

my_data = f['.']['a_dataset'].value #KeyError

Я могу переделать свои файлы в группу, если нет решения. Хотя действительно кажется, что должно быть решение ...

Похоже, что h5py не видит никаких ключей:

f.keys()
[]

person Joshua Zollweg    schedule 16.02.2015    source источник
comment
Что содержит f.keys()? Распечатайте и посмотрите!   -  person gspr    schedule 16.02.2015
comment
Извините, я должен был включить это. У меня пустой список: []   -  person Joshua Zollweg    schedule 16.02.2015
comment
Что ж, тогда я сомневаюсь, что ваш файл HDF5 действительно что-то содержит. Вы пробовали проверять с помощью h5ls или подобного? Может быть, вы можете поделиться выводом h5ls или показать нам код, который создал файл HDF5?   -  person gspr    schedule 16.02.2015
comment
Я вижу данные, когда открываю файл с помощью HDHView, поэтому я знаю, что они там есть. В HDFView я могу выбрать каждый набор данных с синтаксисом вроде [/ a_dataset], но это не работает в python h5py.   -  person Joshua Zollweg    schedule 16.02.2015
comment
И вы абсолютно уверены, что вы проверили f.keys в блоке with hdf…?   -  person gspr    schedule 16.02.2015
comment
Да, у меня возникали ошибки при запуске кода, и я пытался впоследствии в режиме отладки и в интерактивном режиме (с и без с)   -  person Joshua Zollweg    schedule 16.02.2015
comment
Последний вариант (для меня) тогда: вы можете поделиться файлом?   -  person gspr    schedule 16.02.2015
comment
Не могу поделиться, но очень ценю вашу помощь!   -  person Joshua Zollweg    schedule 16.02.2015


Ответы (3)


Я обнаружил проблему, которую, как мне кажется, должен решить h5py.

Проблема (которую я изначально забыл подробно описать в отредактированном вопросе) заключается в том, что я открываю файл hdf5 с помощью относительного пути к файлу. Когда я использую и абсолютный путь к файлу, все работает отлично.

К сожалению, это вызовет у меня проблемы в будущем, поскольку мой код предназначен для переносимой работы на разных машинах ...

Спасибо gspr и jimmyb за их помощь :-)

person Joshua Zollweg    schedule 16.02.2015
comment
Это 2019 год, и я могу подтвердить, что проблема еще не решена. К счастью, за ваш ответ ... - person atmaere; 29.08.2019

Он отлично работал, когда я использовал относительный путь.

Написать:

fileName = "data/hdf5/topo.hdf5"

with h5py.File(fileName, 'w') as f:
    dset = f.create_dataset('topography', data = z, dtype = 'float32')

Чтобы прочитать данные:

with h5py.File(fileName, 'r') as f:
    my_data = f['.']['topography'].value
person Jasmine    schedule 04.03.2016

Я думаю, что это должно сработать:

f['.']['a_dataset']

И вы можете попробовать сделать:

dir(f['/']) 
dir(f['.'])
person jimmyb    schedule 16.02.2015
comment
К сожалению, у меня это не сработало. Когда я использую f.keys (), я получаю пустой список. - person Joshua Zollweg; 16.02.2015
comment
Для всех этих опций возвращаются пустые списки ключей. Почему-то нет членства в группах ... - person Joshua Zollweg; 16.02.2015