【问题标题】:How to read variable-length strings with h5py如何使用 h5py 读取可变长度字符串
【发布时间】:2018-09-20 18:56:54
【问题描述】:

我正在尝试使用 h5py 从 C 中创建的 HDF5 文件中读取可变长度字符串数组。举个简单的例子,我使用了来自 HDF5 组的可变长度字符串数组示例,h5ex_t_vlstringatt.c @987654321 @。我用 h5pcc 编译,示例程序运行良好(它读入它写入的文件并打印出内容)。

但是,我只是在 python 中得到一个空对象;用一个简单的示例程序

import h5py                                                                      
fnam = 'h5ex_t_vlstringatt.h5'                                                   
data = h5py.File(fnam, 'r')                                                      
print data['DS1']

我明白了

<HDF5 dataset "DS1": shape None, type "<i4">

另外,我正在使用我刚刚更新的 python 的 anaconda 发行版,所以 h5py 是 ~2.8 版本。

【问题讨论】:

    标签: hdf5 h5py


    【解决方案1】:

    从链接下载文件:

    2148:~/mypy$ h5dump h5ex_t_vlstringatt.h5 
    HDF5 "h5ex_t_vlstringatt.h5" {
    GROUP "/" {
       DATASET "DS1" {
          DATATYPE  H5T_STD_I32LE
          DATASPACE  NULL
          DATA {
          }
          ATTRIBUTE "A1" {
             DATATYPE  H5T_STRING {
                STRSIZE H5T_VARIABLE;
                STRPAD H5T_STR_SPACEPAD;
                CSET H5T_CSET_ASCII;
                CTYPE H5T_C_S1;
             }
             DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
             DATA {
             (0): "Parting", "is such", "sweet", "sorrow."
             }
          }
       }
    }
    }
    

    在 Ipython 会话中

    In [167]: f = h5py.File('h5ex_t_vlstringatt.h5', 'r')
    In [168]: list(f.keys())
    Out[168]: ['DS1']
    In [169]: f['DS1']
    Out[169]: <HDF5 dataset "DS1": shape (), type "<i4">
    In [170]: f['DS1'].attrs
    Out[170]: <Attributes of HDF5 object at 2826604252>
    In [171]: list(f['DS1'].attrs.keys())
    Out[171]: ['A1']
    In [172]: f['DS1'].attrs['A1']
    Out[172]: array([b'Parting', b'is such', b'sweet', b'sorrow.'], dtype=object)
    

    字符串存储在数据集的属性中,而不是作为集合的值。

    【讨论】:

    • 啊,正是如此。现在一切都很好。我仍然不知道如何编写可变长度字符串的数据集,但至少在我的应用程序中,将它们写为属性更有意义。
    • 试过docs.h5py.org/en/latest/special.html#variable-length-strings?我已经回答了一些关于此的 SO 问题。
    • 我确实看过这个教程,但我对用 C 而不是 python 编写可变长度字符串很感兴趣。我应该从 support.hdfgroup.org/HDF5/examples/api-c.html 关注 h5ex_t_vlstring.c,但是将字符串数组作为属性写入对我来说是有意义的。
    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2019-01-29
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多