如何使用 h5py 读取只有数据集(无组)的 HDF5 文件?

Posted

技术标签:

【中文标题】如何使用 h5py 读取只有数据集(无组)的 HDF5 文件?【英文标题】:How to read HDF5 files that have only datasets (no groups) using h5py? 【发布时间】:2015-04-17 08:05:07 【问题描述】:

我有想要使用 Python 模块 h5py(在 Python 2.7 中)打开的 HDF5 文件。

当我有一个包含组和数据集的文件时,这很容易:

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()
[]

【问题讨论】:

f.keys() 包含什么?打印出来看看! 对不起,我应该把它包括在内。我得到一个空列表:[] 那么我怀疑您的 HDF5 文件实际上包含任何内容。您是否尝试过使用 h5ls 或类似工具进行检查?也许您可以分享 h5ls 的输出或向我们展示生成 HDF5 文件的代码? 当我用 HDHView 打开文件时可以看到数据,所以我知道它在那里。在 HDFView 中,我可以使用 [/a_dataset] 之类的语法选择每个数据集,但这在 python h5py 中不起作用。 您绝对肯定您检查了f.keys with hdf… 块内? 【参考方案1】:

我发现了这个问题,我认为这是 h5py 应该解决的问题。

问题(我最初忘记在问题中详细说明,现在已编辑)是我使用 relative 文件路径打开 hdf5 文件。当我使用 absolute 文件路径时,一切正常。

遗憾的是,这会给我带来麻烦,因为我的代码打算在不同的机器上可移植地运行......

感谢 gspr 和 jimmyb 的帮助 :-)

【讨论】:

2019 年,我可以确认该问题尚未解决。感谢您的回答...【参考方案2】:

当我使用相对路径时效果很好。

写作:

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

【讨论】:

【参考方案3】:

我认为这应该可行:

f['.']['a_dataset']

你可能会尝试这样做:

dir(f['/']) 
dir(f['.'])

【讨论】:

遗憾的是它对我不起作用。当我使用 f.keys() 时,我得到一个空列表。 为所有这些选项返回空的键列表。由于某种原因,没有组成员资格...

以上是关于如何使用 h5py 读取只有数据集(无组)的 HDF5 文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 h5py 从 h5 文件中的同一组中读取多个数据集

如何区分 HDF5 数据集和使用 h5py 的组?

使用 pandas 读取 hdf5 数据集

如何使用 Python 和 h5py 读取 HDF5 属性(元数据)

H5PY 键读取速度慢

H5PY键读取缓慢