需要明确的是,访问没有数据集('members')的组('cycles')不会导致错误。错误消息 (bad symbol table node signature) 听起来像是文件中的某些内容已损坏。这些类型的错误很难重现,因此没有文件很难诊断。也就是说,这里有一些想法可以尝试。
首先,当你运行这个 Python/h5py 代码时会发生什么:
with h5py.File('file.h5', 'r') as g:
print(len(g['cycle_1'].keys())) # get number of datasets for a "good" group
print(len(g['cycle_100'].keys())) # get number of datasets for the "bad" group
我预计您会在 g['cycle_100'] 上遇到类似的错误,但值得一试。
您可以使用 HDF5 实用程序 h5ls 和 h5dump 检查您的文件。我认为它们是通过 h5py 交付的。我在 Python 的 Library\bin 文件夹中找到了它们。 (如果没有,您将需要安装 HDF5 来获取它们。)您在命令行上运行这些命令(而不是作为 Python 代码)。
- 使用
h5ls 命令获取所有组和数据集的列表
名称和形状,像这样:h5ls -r file.h5
- 使用
h5dump 命令列出所有组和数据集的标头信息,如下所示:h5dump -H file.h5。
- 这两个命令都有您可能想要调查的其他选项。输入不带任何参数的命令名称以获得“帮助”输出。
两个实用程序的简单文件输出示例如下所示。 group1 组有 5 个数据集,group2 没有数据集。
E:[.\StackOverflow]->h5ls -r file.h5
/ Group
/group1 Group
/group1/dset_01 Dataset {1, 100, 20, 20}
/group1/dset_02 Dataset {1, 100, 20, 20}
/group1/dset_03 Dataset {1, 100, 20, 20}
/group1/dset_04 Dataset {1, 100, 20, 20}
/group1/dset_05 Dataset {1, 100, 20, 20}
/group2 Group
E:[.\StackOverflow]->h5dump -H file.h5
HDF5 "file.h5" {
GROUP "/" {
GROUP "group1" {
DATASET "dset_01" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 1, 100, 20, 20 ) / ( 1, 100, 20, 20 ) }
}
DATASET "dset_02" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 1, 100, 20, 20 ) / ( 1, 100, 20, 20 ) }
}
DATASET "dset_03" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 1, 100, 20, 20 ) / ( 1, 100, 20, 20 ) }
}
DATASET "dset_04" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 1, 100, 20, 20 ) / ( 1, 100, 20, 20 ) }
}
DATASET "dset_05" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 1, 100, 20, 20 ) / ( 1, 100, 20, 20 ) }
}
}
GROUP "group2" {
}
}
}
E:[.\StackOverflow]->