ortografia corregir python h5py

python - corregir - Cómo almacenar el diccionario en el conjunto de datos HDF5



corregir ortografia python (4)

Esta pregunta se relaciona con la cuestión más general de poder almacenar cualquier tipo de diccionario en formato HDF5 . Primero, convierte el diccionario a una cadena. Luego, para recuperar el diccionario, use la biblioteca ast usando el comando import ast . El siguiente código da un ejemplo.

>>> 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''>

Tengo un diccionario, donde la clave es el objeto de fecha y hora y el valor es una tupla de enteros:

>>> d.items()[0] (datetime.datetime(2012, 4, 5, 23, 30), (14, 1014, 6, 3, 0))

Quiero almacenarlo en el conjunto de datos HDF5, pero si intento simplemente descargar el diccionario, h5py genera un error:

TypeError: Object dtype dtype (''object'') no tiene un equivalente HDF5 nativo

¿Cuál sería "la mejor" manera de transformar este diccionario para que pueda almacenarlo en el conjunto de datos HDF5?

Específicamente, no quiero simplemente volcar el diccionario en una matriz numpy, ya que complicaría la recuperación de datos según la consulta de fecha y hora.


He encontrado dos maneras de esto:

I) transformar el objeto datetime en una cadena y usarlo como nombre de conjunto de datos

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))

donde se puede acceder a los datos preguntando cadenas clave (nombre de los conjuntos de datos). Por ejemplo:

for ds in h.keys(): if ''2012-04'' in ds: print(h[ds].value)

II) transformar el objeto datetime en subgrupos de conjunto de datos

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))

Observe las barras diagonales hacia adelante en la cadena de caracteres, lo que creará los subgrupos apropiados en el archivo HDF. Se puede acceder a los datos directamente como h[''2012''][''04''][''05''][''23:30''].value ''23:30 h[''2012''][''04''][''05''][''23:30''].value Value, o iterando con los iteradores h5py proporcionados, o incluso usando funciones personalizadas a través de visititems()

Por simplicidad elijo la primera opción.


Hoy en día tenemos deepdish (www.deepdish.io):

import deepdish as dd dd.io.save(filename, {''dict1'': dict1, ''dict2'': dict2}, compression=(''blosc'', 9))


Serializaría el objeto en JSON o YAML y almacenaría la cadena resultante como un atributo en el objeto apropiado (grupo HDF5 o conjunto de datos).

Sin embargo, no estoy seguro de por qué está usando datetime como un nombre de conjunto de datos, a menos que tenga que buscar su conjunto de datos directamente por datetime.

ps Para lo que vale, PyTables es mucho más fácil de usar que el h5py de bajo nivel .