Leggi il file binario in Python
-
Leggere un file binario con la funzione
open()
in Python -
Leggere un file binario con
pathlib.Path
in Python -
Leggere un file binario con la funzione
numpy.fromfile()
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:
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()
.
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