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:
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:
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:
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:
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.
Publicación traducida automáticamente
Artículo escrito por agarwalkeshav8399 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA