How to read HDF5 files that have only datasets (no groups) using h5py?

Joshua Zollweg picture Joshua Zollweg · Feb 16, 2015 · Viewed 12.5k times · Source

I have HDF5 files that I would like to open using the Python module h5py (in Python 2.7).

This is easy when I have a file with groups and datasets:

import h5py as hdf

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

However, in my current situation I do not have groups. There are only datasets. Unfortunately, I cannot access my data no matter what I try. None of the following work (all break with KeyErrors or 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

I can remake my files to have a group if there is no solution. It really seems like there should be a solution, though...

It seems like h5py is not seeing any keys:

f.keys()
[]

Answer

Joshua Zollweg picture Joshua Zollweg · Feb 16, 2015

I found the issue, which I think is an issue h5py should address.

The issue (which I originally forgot to detail in the question, now edited) is that I open the hdf5 file with a relative file path. When I use and absolute file path, everything works perfectly.

Sadly, this is going to cause me problems down the road as my code is intended to run portably on different machines...

Thanks to gspr and jimmyb for their help :-)