Leia o arquivo binário em Python

Manav Narula 30 janeiro 2023
  1. Leia um arquivo binário com a função open() em Python
  2. Leia um arquivo binário com pathlib.Path em Python
  3. Leia um arquivo binário com a função numpy.fromfile() em Python
Leia o arquivo binário em Python

O programa ou o processador interno interpreta um arquivo binário. Ele contém os bytes como o conteúdo. Quando lemos um arquivo binário, um objeto do tipo bytes é retornado.

Leia um arquivo binário com a função open() em Python

Em Python, temos a função open() usada para criar um objeto de arquivo passando seu caminho para a função e abrindo um arquivo em um modo específico, modo de leitura por padrão. Quando abrimos arquivos binários, temos que especificar o parâmetro b ao abrir esses arquivos no modo de leitura, escrita ou anexação. Neste tutorial, vamos lidar com o modo de leitura binária - rb.

No código abaixo, vamos ler um arquivo binário e imprimir um caractere do arquivo:

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

print(data[2])

Resultado:

83

Se imprimirmos caracteres individuais, podemos ver os inteiros.

Python tem um pacote chamado struct, que tem muitos métodos e pode ser usado para lidar com dados binários armazenados em arquivos, bancos de dados e outros recursos.

O struct.unpack() é usado para ler dados compactados em um layout de formato especificado. Esse layout, que é usado ao compactar e descompactar dados, é especificado usando caracteres de formato. Esses caracteres de formato, junto com seu tamanho, são mostrados abaixo:

tabela de caracteres de formato de descompactação de estrutura

Observe que a função struct.unpack() sempre retorna uma tupla.

import struct

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

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

Resultado:

(1280, 27731, 7037801)

Aqui, hhl indica int curto, curto e longo como o layout de formato de dados, como podemos ver na saída. É por isso que o buffer para descompactar é de apenas 8 bytes, já que o tamanho do layout do formato é 8 (2 + 2 + 4).

Leia um arquivo binário com pathlib.Path em Python

Também podemos usar o método read_bytes() da classe Path na biblioteca pathlib para ler um arquivo no modo bytes e então interpretar os dados usando a função struct.unpack() conforme mostrado anteriormente:

from pathlib import Path
import struct

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

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

print(multiple)

Resultado:

(1817380096, 7037801)

Leia um arquivo binário com a função numpy.fromfile() em Python

Outra abordagem interessante é fornecida no módulo NumPy. Usando a função fromfile() neste módulo, podemos ler dados binários de arquivos após especificar os dados de formato usando a função dtype(). Este é considerado um método rápido. O código a seguir mostra como implementar isso:

import numpy as np

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

print(bdata)

Resultado:

[1817380096    7037801]

Aqui especificamos o tipo de formato como inteiro de 32 bits e extraímos os dados usando a função 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

Artigo relacionado - Python File