如何使用 h5py 读取可变长度字符串
How to read variable-length strings with h5py
我正在尝试使用 h5py 从用 C 语言创建的 HDF5 文件中读取可变长度字符串数组。作为一个简单的示例,我使用了来自 HDF5 组的可变长度字符串数组示例,h5ex_t_vlstringatt.c 在 https://support.hdfgroup.org/HDF5/examples/api-c.html。我用 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。
正在从 link 下载文件:
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)
字符串存储在数据集的属性中,而不是作为集合的值。
我正在尝试使用 h5py 从用 C 语言创建的 HDF5 文件中读取可变长度字符串数组。作为一个简单的示例,我使用了来自 HDF5 组的可变长度字符串数组示例,h5ex_t_vlstringatt.c 在 https://support.hdfgroup.org/HDF5/examples/api-c.html。我用 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。
正在从 link 下载文件:
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)
字符串存储在数据集的属性中,而不是作为集合的值。