2017-07-31 293 views
0

我收到这个错误,试图直接在python中分析来自HDF5文件的数据。这段代码在我的linux机器上工作正常,但我得到这个错误,试图编译我的Mac中Spyder3相同的脚本。我试图使用我的Mac的原因是因为我不知道如何编写和运行Linux终端上的脚本。TypeError:'KeysView'对象不支持索引

def dataProcessing(datafile): 
import h5py 
import numpy as np 
import matplotlib.pyplot as plt 
import pylab 

f = h5py.File(datafile, 'r') 
#print(f) 
#print("Keys: %s" % f.keys()) 
groupKeyVal = f.keys()[4] 
rawData = list(f[groupKeyVal]) 

rawDataMat = np.matrix(rawData) 

for i in range(0,len(rawDataMat[:,0])): 
    fig = rawDataMat[i,:] 
    wav = np.squeeze(np.asarray(fig)) 
    plt.plot(wav) 
    plt.show() 

回答

2

在Python3中,字典keys返回'view',而不是可索引列表。

In [80]: d={'a':1, 'b':2} 
In [81]: d.keys() 
Out[81]: dict_keys(['a', 'b']) 
In [82]: d.keys()[0] 
.... 
TypeError: 'dict_keys' object does not support indexing 

类似地,对于字典像钥匙从h5

In [86]: f = h5py.File('data.h5') 
In [87]: f.keys() 
Out[87]: KeysView(<HDF5 file "data.h5" (mode r+)>) 
In [88]: f.keys()[0] 
.... 
TypeError: 'KeysView' object does not support indexing 
In [89]: list(f.keys()) 
Out[89]: ['dset', 'dset1', 'vset'] 
In [90]: list(f.keys())[1] 
Out[90]: 'dset1' 

添加list是一个比特的麻烦,但它使上的按键更高效的存储器迭代。

In [92]: for k in f.keys():print(f[k]) 
<HDF5 dataset "dset": shape (3, 5), type "<f8"> 
<HDF5 dataset "dset1": shape (2, 3, 10), type "<f8"> 
<HDF5 dataset "vset": shape (100,), type "|O">