Archivos HDF5 en Python

El archivo HDF5 significa Formato de datos jerárquicos 5. Es un archivo de código abierto que resulta útil para almacenar una gran cantidad de datos. Como sugiere el nombre, almacena datos en una estructura jerárquica dentro de un solo archivo. Entonces, si queremos acceder rápidamente a una parte particular del archivo en lugar de a todo el archivo, podemos hacerlo fácilmente usando HDF5. Esta funcionalidad no se ve en los archivos de texto normales, por lo que HDF5 se está volviendo aparentemente popular en el hecho de ser un concepto nuevo. Para usar HDF5, se debe importar numpy. Una característica importante es que puede adjuntar metaset a todos los datos del archivo, lo que proporciona una búsqueda y un acceso potentes. Comencemos con la instalación de HDF5 en la computadora.
Para instalar HDF5, escribe esto en tu terminal:
 

pip install h5py

Usaremos una herramienta especial llamada HDF5 Viewer para ver estos archivos gráficamente y trabajar con ellos. Para instalar HDF5 Viewer, escriba este código:
 

pip install h5pyViewer

Como HDF5 funciona en numpy, también necesitaríamos numpy instalado en nuestra máquina.
 

python -m pip install numpy

Una vez finalizadas todas las instalaciones, veamos cómo podemos escribir en un archivo HDF5.
Nota: Trabajar con HDF5 requiere una comprensión básica de numpy y sus atributos, por lo que uno debe estar familiarizado con numpy para comprender los códigos que se encuentran a continuación en este artículo. Para saber más sobre numpy haz clic aquí .
Crearemos un archivo y guardaremos una array aleatoria de numpy en él: 
 

Python3

# Python program to demonstrate
# HDF5 file
 
import numpy as np
import h5py
 
# initializing a random numpy array
arr = np.random.randn(1000)
 
# creating a file
with h5py.File('test.hdf5', 'w') as f:
    dset = f.create_dataset("default", data = arr)

Producción:
 

pythonHDF5

En el código anterior, primero importamos los módulos que se instalaron previamente. Luego inicializamos la variable arr en una array aleatoria de números que van hasta 1000. 
Por lo tanto, podemos decir que esta array consta de una gran cantidad de datos. A continuación, abrimos el archivo como atributo de «solo escritura». Esto significa que si no hay ningún archivo con el nombre test.hdf5 , creará uno; de lo contrario, eliminará (sobrescribirá) el contenido del archivo existente. Al abrir el archivo, usamos with en lugar de open, ya que tiene una ventaja en comparación con el método open(). No necesitamos cerrar un archivo si lo abrimos usando con Finalmente, usamos .create_dataset() para establecer la variable dset en la array que se creó anteriormente.
Ahora vamos a leer el archivo que escribimos arriba:
 

Python3

# open the file as 'f'
with h5py.File('test.hdf5', 'r') as f:
    data = f['default']
     
    # get the minimum value
    print(min(data))
     
    # get the maximum value
    print(max(data))
     
    # get the values ranging from index 0 to 15
    print(data[:15])
    

Producción:
 

python-HDF5

Aquí, abrimos el archivo nuevamente, pero esta vez lo abrimos con el atributo de «solo lectura» para que no se puedan realizar cambios en el archivo. Establecemos los datos variables a los datos que almacenamos en el archivo anterior. Veamos el resultado:
Puede parecer que no hay nada nuevo. Es solo una array y estamos imprimiendo los números como en una array. Pero, los datos variables no son una array . En realidad es muy diferente a array. Es un conjunto de datos. En lugar de almacenar datos en la RAM, los guarda en el disco duro de la computadora, manteniendo así una jerarquía de estructuras como directorios:
 

python-HDF5

Cuando se utiliza la siguiente línea 
 

data = f['default']

en el código anterior, no accedimos directamente al contenido del archivo, sino que creamos un puntero para apuntar a nuestro contenido. Veamos una ventaja de esto:
 

Python3

import numpy as np
import h5py
 
 
arr1 = np.random.randn(10000)
arr2 = np.random.randn(10000)
 
with h5py.File('test_read.hdf5', 'w') as f:
    f.create_dataset('array_1', data = arr1)
    f.create_dataset('array_2', data = arr2)

Creamos dos conjuntos de datos, pero todo el procedimiento es el mismo que antes. Se crea un archivo llamado «test_read.hdf5» utilizando el atributo «w» y contiene dos conjuntos de datos ( array1 y array2 ) de números aleatorios. Ahora supongamos que queremos leer solo una parte selectiva de array2 . Por ejemplo, queremos leer la parte de array2 correspondiente a donde los valores de array1 son mayores que 1 . Si estuviéramos usando archivos de texto convencionales en lugar de archivos HDF5, sería casi imposible lograr esto. Ahí es exactamente donde vemos el poder de los archivos HDF5:
 

Python3

with h5py.File('test_read.hdf5', 'r') as f:
    d1 = f['array_1']
    d2 = f['array_2']
 
    data = d2[d1[:]>1]

Usamos [:] para crear una copia del conjunto de datos d1 en la RAM. Hicimos esto porque un conjunto de datos (los datos en el disco duro) no se puede comparar con los números enteros. 
Producción:
 

python-HDF5

Por lo tanto, llegamos a la conclusión de que los archivos HDF5 son nuestras mejores herramientas cuando se trata de archivos de gran tamaño, ya que nos permite leer y escribir de forma selectiva archivos que, de otro modo, habrían consumido mucha memoria y tiempo.
 

python-HDF5

Publicación traducida automáticamente

Artículo escrito por agarwalkeshav8399 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *