【问题标题】:Writing a comma separated string attribute to HDF5 dataset C++将逗号分隔的字符串属性写入 HDF5 数据集 C++
【发布时间】:2014-06-26 14:09:42
【问题描述】:

我正在尝试将逗号分隔的字符串属性写入 HDF5 数据集。我使用创建数据集,

dset = H5Dcreate(file, "dset1", H5T_NATIVE_DOUBLE, file_space, H5P_DEFAULT, plist, H5P_DEFAULT);

数据基本上是柱状的,有

等字段
Timestamp  Prop1   Prop2

现在我知道这是一个 hack,但我的目的是以某种方式用“TimeStamp,Prop1,Prop2”之类的字符串标记 dset 就足够了。我希望在 python 中读取 HDF5 文件,并且可以轻松读取字符串。我认为可以为此使用 H5AWrite 方法。但我不确定我们是否可以用它写字符串,我的问题是

1)如何使用逗号分隔属性的写法

2) 如何在 Python 中打开文件时将其读回。

我找不到任何用 C++ 实现的示例。任何指针将不胜感激。

【问题讨论】:

    标签: c++ hdf5


    【解决方案1】:

    下面是如何将属性写成字符串,例如column1,column2,column3(使用 C API,因为尽管要求 C++,但您似乎正在使用它):

    hid_t atype = H5Tcopy(H5T_C_S1);
    H5Tset_size(atype, H5T_VARIABLE);
    hid_t attr = H5Acreate(dset, "columns", atype, H5S_SCALAR, H5P_DEFAULT);
    H5Awrite(attr, atype, "column1,column2,column3");
    H5Aclose(attr);
    

    然后用 Python 读取它:

    import h5py 
    file =  h5py.File("my_file.h5", "r")
    dset = file["/my_dset"]
    columns = dset.attrs["columns"].split(",")
    

    【讨论】:

    • 感谢西蒙,感谢您的帮助!就你而言,我在 VStudio c++ 中运行它,它构建并运行良好。
    • 请注意,您可以通过将属性编写为字符串数组而不是具有逗号分隔值的单个字符串来使其更佳......但这有点简单。
    • 是的,但这适用于我的目的,但是是的,谢谢你的建议,我明白你在说什么。
    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多