如何检索存储字符串的HDF5数据集

How can I retrieve HDF5 dataset that is storing strings(如何检索存储字符串的HDF5数据集)

本文介绍了如何检索存储字符串的HDF5数据集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用下面的命令创建H5数据集,该数据集使用dtype作为S10来存储字符串数组。

create_dataset(dset_name, (0,) , dtype='S10', maxshape=None, chunks=True)
它将数据正确存储在hdf5文件的组中。我甚至可以在HDF5查看器中看到正确的数据。但是,当我使用group.keys()时,我看不到数据集。数据集的图标也以不同的方式显示,如下图所示: 另外,当我在终端上启动数据集时,输出如下 [b'str', b'str2', b'str3', ...]字符串int b‘’格式

如何检索这样的数据集?

Check this link to see the difference in the icon of the dataset

推荐答案

hdf5(和h5py)将字符存储为字节字符串,而不是unicode字符。因此,在与HDF5和Python之间来回转换时,您必须转换数据类型。您可以对数组使用.astype()或在单个元素中使用.encode()/.decode()

这里有一个简单的示例来演示该行为。它首先创建一个模仿您的文件,然后提取数据:一次作为默认字节字符串(‘S10’),然后使用.astype('U')将数组转换为Unicode。

import h5py
import numpy as np

## Create a simple example file
with h5py.File('SO_69498550.h5','w') as h5w:
    grp = h5w.create_group('flower')
    iarr = np.arange(10)
    grp.create_dataset('g', data=iarr, maxshape=None, chunks=True)
    sarr = np.array( ['str0','str1','str2','str3','str4', 
                     'str5','str6','str7','str8','str9'], dtype='S10' )
    grp.create_dataset('g_var', data=sarr, maxshape=None, chunks=True)
    
## Open file and read data from string dataset: 'flower/g_var'
with h5py.File('SO_69498550.h5','r') as h5r:
    u_arr = h5r['flower/g_var'][:]
    print(f'u_arr dtype: {u_arr.dtype}') 
    print(u_arr)
    s_arr = h5r['flower/g_var'][:].astype('U')
    print(f's_arr dtype: {s_arr.dtype}') 
    print(s_arr)

这篇关于如何检索存储字符串的HDF5数据集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何检索存储字符串的HDF5数据集