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

问题描述 投票:0回答:1

我需要在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++ file-io interface hdf5
1个回答
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函数。

© www.soinside.com 2019 - 2024. All rights reserved.