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

我有一本字典,其中键是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查询的数据检索变得复杂。

参考方案

我发现了两种方法:

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

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()使用自定义函数来访问数据

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

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

python JSON对象必须是str,bytes或bytearray,而不是'dict - python

在Python 3中,要加载以前保存的json,如下所示:json.dumps(dictionary)输出是这样的{"('Hello',)": 6, "('Hi',)": 5}当我使用json.loads({"('Hello',)": 6,…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python ThreadPoolExecutor抑制异常 - python

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…