从HDF5中的组中获取多个数据集

时间:2017-01-06 00:14:17

标签: python hdf5 h5py

我正在比较两个不同的hdf5文件,以确保它们匹配。我想创建一个包含hdf5文件中组中所有数据集的列表,这样我就可以循环遍历所有数据集,而不是手动输入它们。我似乎无法找到这样做。目前我正在使用此代码获取数据集:

tdata21 = ft['/PACKET_0/0xeda9_data_0004']

集合的名称位于" PACKET_0"组。一旦我安排了所有数据集,我就会比较这个循环中数据集中的数据:

for i in range(len(data1)):
   print "%d\t%g\t%g" % (i, data1[i],tdata1[i])
   if(data1[i]!=tdata1[i]):
     x="data file: data1 \nline:"+ str(i) + "\norgianl data:"  + str(data1[i]) + "\nrecieved data:" + str(tdata1[i]) + "\n\n"
     correct.append(x)

如果有更智能的方法来比较hdf5文件我希望看到它,但主要是我只是想找到一种方法将组中所有数据集的名称放入列表中。谢谢

1 个答案:

答案 0 :(得分:2)

要获取HDF5组或文件中存在的数据集或组,只需在该组或文件上调用String[] parts = str.split("\\."); 即可。使用您的示例,您有

list()

您也可以通过执行以下操作直接迭代它们:

datasets = list(ft['/PACKET_0'])

如果要比较两个数据集的相等性(即它们具有相同的数据),最简单的方法是:

for name, data in ft['/PACKET_0'].items():
    # do stuff for each dataset

这将返回每个数据集中的NumPy数组,逐个元素地比较这些数组,如果它们在任何地方匹配则返回(dataset1.value == dataset2.value).all() ,否则返回True

您可以将这两个概念结合起来比较两个不同文件中的每个数据集。