从Python存储字符串列表到HDF5数据集

时间:2014-04-22 13:05:35

标签: python hdf5 h5py

我正在尝试将可变长度的字符串列表存储到HDF5数据集中。这个代码是

import h5py
h5File=h5py.File('xxx.h5','w')
strList=['asas','asas','asas']  
h5File.create_dataset('xxx',(len(strList),1),'S10',strList)
h5File.flush() 
h5File.Close()  

我收到一条错误,指出“TypeError:dtype没有转换路径:dtype('& lt U3')” 其中& lt表示实际小于符号
我怎么解决这个问题。

2 个答案:

答案 0 :(得分:21)

您正在读取Unicode字符串,但将数据类型指定为ASCII。根据{{​​3}},h5py目前不支持此转换。

您需要以h5py句柄格式对字符串进行编码:

asciiList = [n.encode("ascii", "ignore") for n in strList]
h5File.create_dataset('xxx', (len(asciiList),1),'S10', asciiList)

注意:并非以UTF-8编码的所有内容都可以用ASCII编码!

答案 1 :(得分:3)

我处于类似的情况,希望将数据帧的列名存储为hdf5文件中的数据集。假设df.columns是我想要存储的,我发现了以下工作:

h5File = h5py.File('my_file.h5','w')
h5File['col_names'] = df.columns.values.astype('S')

这假设列名称是可以用ASCII编码的“简单”字符串。