我正在使用h5py从HDF5文件中读取数据,并且发现使用Python 2工作的代码无法使用Python 3.文件的格式使得2D数据帧作为不同的数据集存在,我想读入一个3D数组。文件结构如下所示:
file.h5
|- groupname (group)
|- frame1 (dataset)
|- frame2 (dataset)
...
要将帧读入3D数组,我必须访问第一个数据集以获取其形状和类型信息。因为我实际上并不知道每个帧的完全名称,所以我用来访问第一帧的代码如下所示:
import h5py
fid = h5py.File('file.h5', 'r')
datagroup = fid['groupname']
dataset0 = datagroup[datagroup.keys()[0]]
但是,h5py的documentation表示
“当使用Python 3中的h5py时,keys(),values()和items()方法将返回类似视图的对象而不是列表。”
视图对象支持迭代但不支持切片。因此,为了避免错误,我必须将该行更改为以下内容:
dataset0 = datagroup[ [k for k in datagroup.keys()][0] ]
人工构建临时列表然后抓取其第一个元素。对我来说这看起来很可怕。有更好的方法吗?
答案 0 :(得分:1)
Group
支持返回迭代器,但不能直接迭代。这导致以下结果:
dataset0 = datagroup[next(iter(datagroup))]