如何获取HDF5文件的数据集信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取HDF5文件的数据集信息相关的知识,希望对你有一定的参考价值。

我需要在C++中以通用方式访问以H5格式存储的数据集。目前它是这样的:

H5File* file = new H5File( path_to_dataset.c_str(), H5F_ACC_RDONLY );
DataSet* h5_dataset_file = new DataSet (file->openDataSet( "Dataset_name" ));
CompType dataset_access( sizeof(dataset_struct));

//...

dataset_access.insertMember(attribute_name,cur_byte_addr,PredType::NATIVE_INT32);

这是有效的,如果我知道所有参数,目前我缺乏attribute_name(例如“功能A”)。

有没有办法在H5文件中获取所有列名?或者我是否需要对其进行硬编码或至少使用用户输入?

编辑:

即对于此示例,我需要label_id,Feature1,Feature2,Feature3,但这些名称与每个数据集不同:

Dataset Attributes

答案

C ++ HDF5库的文档在这里:HDF5 C++ API。这些为您提供了一个很好的类概述以及一些C ++示例。对于像dataset.iterate_attrs(...)中使用的attr_operator_t这样的较低级别的东西,请参阅HDF5 C/FORTRAN API

作为一个最小的工作示例,下面的内容应该可行。请注意,使用lambda而不是void attr_op(...)函数可能更好。

#include <H5Cpp.h>
#include <iostream>
#include <string>

void attr_op(H5::H5Location &loc, const std::string attr_name,
             void *operator_data) {
  std::cout << attr_name << std::endl;
}

int main() {
  // these are defined somewhere
  std::string file_name, dataset_name;


  H5::H5File file{file_name, H5F_ACC_RDONLY};
  auto dataset = file.openDataSet(dataset_name);

  dataset.iterateAttrs(attr_op);
}

从这里开始使用像here这样的API函数。

以上是关于如何获取HDF5文件的数据集信息的主要内容,如果未能解决你的问题,请参考以下文章

C++ 代码创建空 HDF5 文件而不是数据集

获取 HDF5 数据集的维度

将多个数据集读/写到单个 HDF5 文件

如何将 Pandas 数据框写入 HDF5 数据集

编写并将float数组附加到C ++中hdf5文件中的唯一数据集

测试 HDF5/c++ 中存在的数据集并处理错误