Cómo leer archivos HDF5 en Python

Estoy tratando de leer los datos del archivo hdf5 en Python. Puedo leer el archivo hdf5 usando h5py , pero no puedo averiguar cómo acceder a los datos dentro del archivo.

Mi código

 import h5py import numpy as np f1 = h5py.File(file_name,'r+') 

Esto funciona y el archivo se lee. Pero, ¿cómo puedo acceder a los datos dentro del objeto de archivo f1 ?

Leer HDF5

 import h5py filename = 'file.hdf5' f = h5py.File(filename, 'r') # List all groups print("Keys: %s" % f.keys()) a_group_key = list(f.keys())[0] # Get the data data = list(f[a_group_key]) 

Escribe HDF5

 #!/usr/bin/env python import h5py # Create random data import numpy as np data_matrix = np.random.uniform(-1, 1, size=(10, 3)) # Write data to HDF5 data_file = h5py.File('file.hdf5', 'w') data_file.create_dataset('group_name', data=data_matrix) data_file.close() 

Ver documentos h5py para más información.

Alternativas

  • JSON: Agradable para escribir datos legibles por humanos; Muy de uso común ( lectura y escritura )
  • CSV: formato super simple ( lectura y escritura )
  • pickle: un formato de serialización Python ( lectura y escritura )
  • MessagePack ( paquete de Python ): Representación más compacta ( lectura y escritura )
  • HDF5 ( paquete de Python ): agradable para matrices ( lectura y escritura )
  • XML: existe también * suspiro * ( lectura y escritura )

Para su aplicación, lo siguiente podría ser importante:

  • Soporte por otros lenguajes de progtwigción.
  • Rendimiento de lectura / escritura
  • Compacidad (tamaño del archivo)

Ver también: Comparación de formatos de serialización de datos.

En caso de que esté buscando una forma de crear archivos de configuración, puede leer mi artículo corto Archivos de configuración en Python

Puedes usar Pandas.

 import pandas as pd pd.read_hdf(filename,key) 

Leyendo el archivo

 import h5py f = h5py.File(file_name, mode) 

Estudiando la estructura del archivo imprimiendo qué grupos HDF5 están presentes

 for key in f.keys(): print(key) #Names of the groups in HDF5 file. 

Extraer los datos.

 #Get the HDF5 group group = f[key] #Checkout what keys are inside that group. for key in group.keys(): print(key) data = group[some_key_inside_the_group].value #Do whatever you want with data #After you are done f.close() 

Lo que necesitas hacer es crear un conjunto de datos. Si echa un vistazo a la guía de inicio rápido, le muestra que necesita usar el objeto de archivo para crear un conjunto de datos. Entonces, f.create_dataset y luego puedes leer los datos. Esto se explica en los documentos .

Para leer el contenido del archivo .hdf5 como una matriz, puede hacer lo siguiente:

 > import numpy as np > myarray = np.fromfile('file.hdf5', dtype=float) > print(myarray) 

Use el siguiente código para leer y convertir datos en una matriz numpy

 import h5py f1 = h5py.File('data_1.h5', 'r') list(f1.keys()) X1 = f1['x'] y1=f1['y'] df1= np.array(X1.value) dfy1= np.array(y1.value) print (df1.shape) print (dfy1.shape) 

Aquí hay una función simple que acabo de escribir, que lee un archivo .hdf5 generado por la función save_weights en keras y devuelve un dict con nombres y pesos de capa:

 def read_hdf5(path): weights = {} keys = [] with h5py.File(path, 'r') as f: # open file f.visit(keys.append) # append all keys to list for key in keys: if ':' in key: # contains data if ':' in key print(f[key].name) weights[f[key].name] = f[key].value return weights 

https://gist.github.com/Attila94/fb917e03b04035f3737cc8860d9e9f9b .

No lo he probado a fondo, pero hace el trabajo por mí.