Leer archivo binario en Python

Manav Narula 30 enero 2023
  1. Leer un archivo binario con la función open() en Python
  2. Leer un fichero binario con pathlib.Path en Python
  3. Leer un archivo binario con la función numpy.fromfile() en Python
Leer archivo binario en Python

El programa o el procesador interno interpreta un archivo binario. Su contenido son los bytes. Cuando leemos un archivo binario, se devuelve un objeto de tipo bytes.

Leer un archivo binario con la función open() en Python

En Python, tenemos la función open() que se utiliza para crear un objeto de archivo pasando su ruta a la función y abriendo un archivo en un modo específico, el modo de lectura por defecto. Cuando abrimos archivos binarios, tenemos que especificar el parámetro b al abrir dichos archivos en modo lectura, escritura o apéndice. En este tutorial, nos ocuparemos del modo de lectura binaria - rb.

En el código siguiente, leeremos un archivo binario e imprimiremos un carácter del archivo:

with open("sample.bin", "rb") as f:
    data = f.read()

print(data[2])

Producción :

83

Si imprimimos caracteres individuales, entonces podemos ver los enteros.

Python tiene un paquete llamado struct, que tiene muchos métodos y puede ser utilizado para manejar datos binarios almacenados en archivos, bases de datos y otros recursos.

El método struct.unpack() se utiliza para leer los datos empaquetados en un formato específico. Dicha disposición, que se utiliza mientras se empaquetan y desempaquetan los datos, se especifica mediante caracteres de formato. Estos caracteres de formato, junto con su tamaño, se muestran a continuación:

tabla de caracteres de formato struct unpack

Tenga en cuenta que la función struct.unpack() siempre devuelve una tupla.

import struct

with open("sample.bin", "rb") as f:
    data = f.read()

unpack_result = struct.unpack("hhl", data[0:8])
print(unpack_result)

Producción :

(1280, 27731, 7037801)

Aquí, hhl indica short, short, y long int como la disposición del formato de datos, como podemos ver en la salida. Por eso el buffer para desempaquetar es de sólo 8 bytes, ya que el tamaño de la disposición del formato es 8(2+2+4).

Leer un fichero binario con pathlib.Path en Python

También podemos utilizar el método read_bytes() de la clase Path de la librería pathlib para leer un fichero en modo bytes y luego interpretar los datos utilizando la función struct.unpack() como se ha mostrado anteriormente:

from pathlib import Path
import struct

data = Path("sample.bin").read_bytes()

multiple = struct.unpack("ii", data[:8])

print(multiple)

Producción :

(1817380096, 7037801)

Leer un archivo binario con la función numpy.fromfile() en Python

El módulo NumPy ofrece otro enfoque interesante. Utilizando la función fromfile() de este módulo, podemos leer datos binarios de archivos después de especificar los datos de formato utilizando la función dtype(). Esto se considera un método rápido. El siguiente código muestra cómo implementarlo:

import numpy as np

with open("sample.bin") as f:
    rectype = np.dtype(np.int32)
    bdata = np.fromfile(f, dtype=rectype)

print(bdata)

Producción :

[1817380096    7037801]

Aquí especificamos el tipo de formato como entero-32 bits y extraemos los datos usando la función fromfile().

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Python File