Leggi il file binario in Python

Manav Narula 30 gennaio 2023
  1. Leggere un file binario con la funzione open() in Python
  2. Leggere un file binario con pathlib.Path in Python
  3. Leggere un file binario con la funzione numpy.fromfile() in Python
Leggi il file binario in Python

Il programma o il processore interno interpreta un file binario. Contiene i byte come contenuto. Quando leggiamo un file binario, viene restituito un oggetto di tipo bytes.

Leggere un file binario con la funzione open() in Python

In Python, abbiamo la funzione open() usata per creare un oggetto file passando il suo percorso alla funzione e aprendo un file in una modalità specifica, modalità di lettura per impostazione predefinita. Quando apriamo file binari, dobbiamo specificare il parametro b quando apriamo tali file in modalità di lettura, scrittura o aggiunta. In questo tutorial, ci occuperemo della modalità di lettura binaria - rb.

Nel codice seguente, leggeremo un file binario e stamperemo un carattere dal file:

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

print(data[2])

Produzione:

83

Se stampiamo singoli caratteri, possiamo visualizzare gli interi.

Python ha un pacchetto chiamato struct, che ha molti metodi e può essere utilizzato per gestire i dati binari memorizzati in file, database e altre risorse.

La struct.unpack() è usata per leggere i dati compressi in un layout di formato specificato. Tale layout, che viene utilizzato durante l’imballaggio e lo spacchettamento dei dati, viene specificato utilizzando i caratteri di formato. Questi caratteri di formato, insieme alla loro dimensione, sono mostrati di seguito:

struct scompatta la tabella dei caratteri del formato

Notare che la funzione struct.unpack() restituisce sempre 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)

Produzione:

(1280, 27731, 7037801)

Qui, hhl indica short, short e long int come layout del formato dati, come possiamo vedere nell’output. Questo è il motivo per cui il buffer per la decompressione è di soli 8 byte poiché la dimensione del layout di formato è 8 (2 + 2 + 4).

Leggere un file binario con pathlib.Path in Python

Possiamo anche usare il metodo read_bytes() dalla classe Path nella libreria pathlib per leggere un file in modalità byte e quindi interpretare i dati usando la funzione struct.unpack() come mostrato in precedenza:

from pathlib import Path
import struct

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

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

print(multiple)

Produzione:

(1817380096, 7037801)

Leggere un file binario con la funzione numpy.fromfile() in Python

Un altro approccio interessante è fornito nel modulo NumPy. Usando la funzione fromfile() in questo modulo, possiamo leggere i dati binari dai file dopo aver specificato il formato dei dati usando la funzione dtype(). Questo è considerato un metodo veloce. Il codice seguente mostra come implementare questo:

import numpy as np

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

print(bdata)

Produzione:

[1817380096    7037801]

Qui specifichiamo il tipo di formato come intero a 32 bit ed estraiamo i dati usando la funzione fromfile().

Autore: Manav Narula
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

Articolo correlato - Python File