h5py报错:'ValuesViewHDF5'对象无'attrs'属性,求原因
问题分析与解决
报错原因
f.values()在h5py搭配Python3的环境下,返回的是ValuesViewHDF5类型的迭代视图对象,它只是HDF5文件顶层组/数据集的集合视图,本身并没有attrs属性。- 你怀疑的Python2/3兼容性问题完全正确:在Python2里,
dict.values()(h5py的File对象行为类似字典)返回的是列表,旧代码里的注释#_._next_() #.next()说明原本逻辑是取这个集合里的第一个元素,但Python3中values()返回的是不可直接访问属性的视图对象,必须先拿到具体的组或数据集实例才行。
修复方案
给你两种靠谱的修复方式:
- 延续旧代码取第一个顶层对象的逻辑:
f = h5py.File(data_dir+rec_filename+'.hdf5', 'r') # 方式一:转成列表后取第一个元素 trial = list(f.values())[0] # 方式二:通过迭代器取第一个元素(对应旧的.next()) trial = next(iter(f.values())) equilibrate = trial.attrs['equilibrate']
- 如果你知道顶层对象的具体名称,直接通过键访问更稳妥(避免依赖顺序):
f = h5py.File(data_dir+rec_filename+'.hdf5', 'r') # 把'your_target_name'替换成实际的组/数据集名称 trial = f['your_target_name'] equilibrate = trial.attrs['equilibrate']
内容的提问来源于stack exchange,提问作者compneuro_python
相关产品推荐
相关产品推荐

