序列化`numpy.dtype`对象:人类可读

时间:2017-12-04 20:24:50

标签: python numpy serialization types

一点背景知识。我正在为HDF5数据库构建应用程序/模式,并且当您第一次构造HDF5文件时,部分API能够指定数据集的dtype(和形状的一部分),但不一定要编写这些数据集在文件关闭之前指定,并删除File对象的包装器。所以我想将这些数据保存在HDF5文件中,这样应用程序员就不必在每次打开文件进行写入时都传递这些规范。我还希望能够为这些数据集支持任意numpy.dtype(通过h5py库)。

除了酸洗之外,是否有一种标准/好方法可以将纯文本序列化为纯文本?

我不想使用酸洗,因为它不是真的可读,并且正在考虑更像JSON样式的格式。

e.g。对于这样的数据类型:

In [1]: dt
Out[1]: dtype([('one', '<i8'), ('two', '<f8')])

1 个答案:

答案 0 :(得分:1)

我的工作解决方案就是使用JSON字符串:

In [1]: dt = numpy.dtype([('one', np.int), ('two', np.float)])
In [2]: dt.descr
Out[2]: [('one', '<i8'), ('two', '<f8')]
In [3]: dt_str = json.dumps(dt.descr)
In [4]: dt_str
Out[4]: '[["one", "<i8"], ["two", "<f8"]]'

可以轻松读回并转换为numpy.dtype

In [5]: np.dtype([tuple(i) for i in json.loads(dt_str)])
Out[5]: dtype([('one', '<i8'), ('two', '<f8')])