使用 python 解析 h5py 中的文件时,无法访问存储在数据类型/命名类型中的信息。
我一直在 python 中使用 h5py 解压 h5m 文件,并且在访问存储在命名类型/数据类型中的数据时遇到了问题。我能够解析我的文件以识别和分离这些命名类型,但我不知道如何实际读取数据类型内的数据。
我正在使用的命名类型不被识别为可迭代或可下标,因此我无法以这种方式分离信息。我能够看到 dtype(例如
('<f8', (6,)))
但我不确定如何/是否需要使用此信息。我已经尝试过检查 我最接近的是做
h5py.h5t.open(my_group.id, my_datatype.id.encode())
其中 my_datatype 是组 my_group 的成员,但是我收到错误消息
KeyError: "Unable to open named datatype synchronously (object '\x03' doesn't exist)"
其中“x03”是 my_datatype 的字节加密的开始。我已经尝试使用文件 id 和 my_datatype 的其他父组代替 my_group 来尝试上面的公式,但它仍然不起作用。 我简直不知所措,也失去了理智。我是否从根本上误解了数据类型对象的工作原理?我错过了这么简单的事情吗???这在某种程度上是不可能的吗???非常感谢任何帮助。
如果没有看到你的代码,很难说你做错了什么。然而,根据您分享的几行内容,我认为您过于复杂化了。读取 HDF5 数据集对象的 h5py 语法几乎与 numpy 数组相同。就像 numpy 一样,HDF5/h5py 可以处理同质和异构数据(在不同的数据集中)。
我写了一个简单的例子来演示。第一部分创建 1 个异构数据集。 (同质数据不需要所有这些步骤。)它有 3 个字段,每个字段都有不同的数据类型(整数、浮点数和字符串各 1 个)。首先,它创建一个 dtype 和空的 rearray,然后用 np.array 数据填充每个字段。然后将该数组写入 HDF5 文件。第二部分展示了如何使用h5py从H5文件中读取数据。
with h5py.File('SO_78619117.h5','w') as h5w:
mixed_dt = np.dtype([('ints',int),('floats',float),('strs','S1')])
mixed_arr = np.empty((10,), dtype=mixed_dt)
mixed_arr['ints'] = np.arange(10,dtype=int)
mixed_arr['floats'] = np.arange(10,20,dtype=float)
mixed_arr['strs'] = np.array([chr(c) for c in range(65,75)]).astype('S1')
h5w.create_dataset('mixed_ds', data=mixed_arr)
with h5py.File('SO_78619117.h5') as h5r:
print(h5r['mixed_ds'])
print('Dataset data:', h5r['mixed_ds'][()])
read_mixed_arr = h5r['mixed_ds'][()]
print('As array:', read_mixed_arr,'\n')
print(h5r['mixed_ds']['ints'])
print(h5r['mixed_ds']['floats'])
print(h5r['mixed_ds']['strs'])