我正在尝试使用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。
答案 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)
字符串存储在数据集的属性中,而不是存储在集合的值中。