如何用h5py读取变长字符串

时间:2018-04-11 02:55:53

标签: hdf5 h5py

我正在尝试使用h5py从C中创建的HDF5文件中读取可变长度字符串数组。例如,我使用了HDF5组中的可变长度字符串数组示例,h5ex_t_vlstringatt.c位于{{ 3}}。我用h5pcc编译并且示例程序运行正常(它读入它写入的文件并打印出内容)。

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

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

我得到了

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

另外,我正在使用我刚刚更新的anaconda python发行版,因此h5py版本为2.8。

1 个答案:

答案 0 :(得分:2)

从链接下载文件:

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)

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