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

时间:2018-03-02 08:10:00

标签: c++ file-io interface 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

1 个答案:

答案 0 :(得分:1)

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函数。