使用 h5py 读取 HDF5 时出错
Error in reading HDF5 using h5py
我已将我的数据集保存为如下图所示的这种形式(HDF5 格式)。所以我有不同的组,即 4、2、40 等,对于每个组,我有 2 个数据集 Annotation
和 Features
。我已经使用代码成功保存了它们,但我无法将它们加载回来。
奇怪的是只有当我尝试读取 Annotation
时才会出现错误。当我尝试阅读 Features
时,阅读效果很好。
我正在使用以下代码:
dataSet = np.array([])
annotation = np.array([])
hdf5Object = readHDF5File('abc.hdf5','r')
w = 2
myGroup = hdf5Object[str(w)]
dataSet = np.array(myGroup['Features'])
annotation = np.array(myGroup['Annotation'])
请在这里赐教,因为我为此苦苦挣扎了一段时间。谢谢。
编辑 1
我在阅读 Annotation
时收到以下错误
Traceback (most recent call last):
File "xyz.py", line 76, in getAllData
annotation = np.array(myGroup['Annotation'])
File "/usr/lib/python2.7/dist-packages/h5py/_hl/group.py", line 153, in __getitem__
oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
File "h5o.pyx", line 173, in h5py.h5o.open (h5py/h5o.c:3403)
KeyError: "unable to open object (Symbol table: Can't open object)"
编辑 2
所以hdf5文件分两步形成,第一步Features
计算如下:
features = <numpy array of thousand rows and 100 columns contains only floating numbers>
w = 2
f = h5py.File('abc.hdf5', 'a')
myGroup = f[str(w)]
myGroup.create_dataset('Features', data=features)
对于不同的 w
文件被追加并且在不同的时间计算特征。
对于注释,使用相同的程序。 Annotation
也只包含浮点数。
编辑 3
下图是一个w
的Annotation
和Features
中的数据内容。左边 window 是 Annotation
右边是 Features
.
我刚刚发现我尝试访问数据集的方式是使用 string
并且在保存数据集名称时以某种方式将其保存在 unicode
或 utf-8
下。因此,当我将数据集名称转换为 utf-8 时,它工作正常。
我是如何找出它的数据类型的
myGroup = hdf5Object[str(w)]
childsIter = myGroup.iterkeys()
for child in childsIter:
print type(child)
这给了我线索,我的数据集键的数据类型是 unicode 而不仅仅是字符串。所以我将我的字符串转换为 unicode,如下所示:
key = unicode('Annotation', "utf-8")
dS = np.array(myGroup[key])
或
myGroup = hdf5Object[str(w)]
childsIter = myGroup.iterkeys()
for child in childsIter:
dS = np.array(myGroup[child])
我已将我的数据集保存为如下图所示的这种形式(HDF5 格式)。所以我有不同的组,即 4、2、40 等,对于每个组,我有 2 个数据集 Annotation
和 Features
。我已经使用代码成功保存了它们,但我无法将它们加载回来。
奇怪的是只有当我尝试读取 Annotation
时才会出现错误。当我尝试阅读 Features
时,阅读效果很好。
我正在使用以下代码:
dataSet = np.array([])
annotation = np.array([])
hdf5Object = readHDF5File('abc.hdf5','r')
w = 2
myGroup = hdf5Object[str(w)]
dataSet = np.array(myGroup['Features'])
annotation = np.array(myGroup['Annotation'])
请在这里赐教,因为我为此苦苦挣扎了一段时间。谢谢。
编辑 1
我在阅读 Annotation
Traceback (most recent call last):
File "xyz.py", line 76, in getAllData
annotation = np.array(myGroup['Annotation'])
File "/usr/lib/python2.7/dist-packages/h5py/_hl/group.py", line 153, in __getitem__
oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
File "h5o.pyx", line 173, in h5py.h5o.open (h5py/h5o.c:3403)
KeyError: "unable to open object (Symbol table: Can't open object)"
编辑 2
所以hdf5文件分两步形成,第一步Features
计算如下:
features = <numpy array of thousand rows and 100 columns contains only floating numbers>
w = 2
f = h5py.File('abc.hdf5', 'a')
myGroup = f[str(w)]
myGroup.create_dataset('Features', data=features)
对于不同的 w
文件被追加并且在不同的时间计算特征。
对于注释,使用相同的程序。 Annotation
也只包含浮点数。
编辑 3
下图是一个w
的Annotation
和Features
中的数据内容。左边 window 是 Annotation
右边是 Features
.
我刚刚发现我尝试访问数据集的方式是使用 string
并且在保存数据集名称时以某种方式将其保存在 unicode
或 utf-8
下。因此,当我将数据集名称转换为 utf-8 时,它工作正常。
我是如何找出它的数据类型的
myGroup = hdf5Object[str(w)]
childsIter = myGroup.iterkeys()
for child in childsIter:
print type(child)
这给了我线索,我的数据集键的数据类型是 unicode 而不仅仅是字符串。所以我将我的字符串转换为 unicode,如下所示:
key = unicode('Annotation', "utf-8")
dS = np.array(myGroup[key])
或
myGroup = hdf5Object[str(w)]
childsIter = myGroup.iterkeys()
for child in childsIter:
dS = np.array(myGroup[child])