是否可以使用python 3在h5py中对键进行切片而不形成列表?

时间:2014-12-01 20:53:45

标签: python python-3.x h5py

我正在使用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] ]

人工构建临时列表然后抓取其第一个元素。对我来说这看起来很可怕。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

Group支持返回迭代器,但不能直接迭代。这导致以下结果:

dataset0 = datagroup[next(iter(datagroup))]