为了账号安全,请及时绑定邮箱和手机立即绑定

如何在HDF5数据集中存储字典

如何在HDF5数据集中存储字典

陪伴而非守候 2021-03-16 18:15:55
我有一本字典,其中键是datetime对象,值是整数元组:>>> d.items()[0](datetime.datetime(2012, 4, 5, 23, 30), (14, 1014, 6, 3, 0))我想将其存储在HDF5数据集中,但是如果我尝试仅转储字典h5py会引发错误:TypeError:对象dtype dtype('object')没有等效的本机HDF5什么是转换此词典以便将其存储在HDF5数据集中的“最佳”方法?具体来说,我不想只是将字典转储为numpy数组,因为这会使基于datetime查询的数据检索变得复杂。
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我发现了两种方法:


I)将datetime对象转换为字符串并将其用作数据集名称


h = h5py.File('myfile.hdf5')

for k, v in d.items():

    h.create_dataset(k.strftime('%Y-%m-%dT%H:%M:%SZ'), data=np.array(v, dtype=np.int8))

通过查询键字符串(数据集名称)可以访问数据的位置。例如:


for ds in h.keys():

    if '2012-04' in ds:

        print(h[ds].value)

II)将日期时间对象转换为数据集子组


h = h5py.File('myfile.hdf5')

for k, v in d.items():

    h.create_dataset(k.strftime('%Y/%m/%d/%H:%M'), data=np.array(v, dtype=np.int8))

注意strftime字符串中的正斜杠,它将在HDF文件中创建适当的子组。可以像一样直接访问数据,也可以通过h['2012']['04']['05']['23:30'].value提供的h5py迭代器进行迭代,甚至可以通过以下方式使用自定义函数来访问数据:visititems()


为简单起见,我选择第一个选项。


查看完整回答
反对 回复 2021-03-23
?
手掌心

TA贡献1942条经验 获得超3个赞

这个问题与更一般的问题有关,即能够以HDF5格式存储任何类型的字典。首先,将字典转换为字符串。然后,要恢复字典,请ast通过使用import ast命令来使用该库。以下代码给出了一个示例。


>>> d = {1:"a",2:"b"}

>>> s = str(d)

>>> s

"{1: 'a', 2: 'b'}"

>>> ast.literal_eval(s)

{1: 'a', 2: 'b'}

>>> type(ast.literal_eval(s))

<type 'dict'>


查看完整回答
反对 回复 2021-03-23
  • 2 回答
  • 0 关注
  • 544 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号