Binärdatei lesen in Python

Manav Narula 30 Januar 2023
  1. Lesen einer Binärdatei mit der Funktion open() in Python
  2. Lesen einer Binärdatei mit pathlib.Path in Python
  3. Lesen einer Binärdatei mit der Funktion numpy.fromfile() in Python
Binärdatei lesen in Python

Das Programm oder der interne Prozessor interpretiert eine Binärdatei. Sie enthält als Inhalt die Bytes. Wenn wir eine Binärdatei lesen, wird ein Objekt vom Typ bytes zurückgegeben.

Lesen einer Binärdatei mit der Funktion open() in Python

In Python gibt es die Funktion open(), mit der ein Dateiobjekt erstellt wird, indem der Pfad an die Funktion übergeben wird und eine Datei in einem bestimmten Modus geöffnet wird, standardmäßig im Lesemodus. Wenn wir Binärdateien öffnen, müssen wir den Parameter b angeben, wenn wir solche Dateien im Lese-, Schreib- oder Anhängsmodus öffnen. In diesem Lernprogramm werden wir uns mit dem binären Lesemodus - rb - beschäftigen.

Im folgenden Code werden wir eine Binärdatei lesen und ein Zeichen aus der Datei ausgeben:

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

print(data[2])

Ausgabe:

83

Wenn wir einzelne Zeichen ausgeben, können wir die ganzen Zahlen betrachten.

Python hat ein Paket namens struct, das viele Methoden hat und zum Umgang mit binären Daten, die in Dateien, Datenbanken und anderen Ressourcen gespeichert sind, verwendet werden kann.

Die Methode struct.unpack() wird verwendet, um gepackte Daten in einem bestimmten Format-Layout zu lesen. Dieses Layout, das beim Packen und Entpacken von Daten verwendet wird, wird durch Formatzeichen angegeben. Diese Formatzeichen werden zusammen mit ihrer Größe im Folgenden dargestellt:

struct unpack Formatzeichentabelle

Beachten Sie, dass die Funktion struct.unpack() immer ein Tupel zurückgibt.

import struct

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

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

Ausgabe:

(1280, 27731, 7037801)

Hier gibt hhl als Datenformat-Layout short, short und long int an, wie wir in der Ausgabe sehen können. Deshalb ist der Puffer zum Entpacken nur 8 Byte groß, da die Größe des Format-Layouts 8(2+2+4) ist.

Lesen einer Binärdatei mit pathlib.Path in Python

Wir können auch die Methode read_bytes() aus der Klasse Path in der Bibliothek pathlib verwenden, um eine Datei im Byte-Modus zu lesen und dann die Daten mit der Funktion struct.unpack() zu interpretieren, wie zuvor gezeigt:

from pathlib import Path
import struct

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

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

print(multiple)

Ausgabe:

(1817380096, 7037801)

Lesen einer Binärdatei mit der Funktion numpy.fromfile() in Python

Ein weiterer interessanter Ansatz ist im Modul NumPy enthalten. Mit der Funktion fromfile() in diesem Modul können wir binäre Daten aus Dateien lesen, nachdem wir die Formatdaten mit der Funktion dtype() angegeben haben. Dies gilt als eine schnelle Methode. Der folgende Code zeigt, wie man dies implementiert:

import numpy as np

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

print(bdata)

Ausgabe:

[1817380096    7037801]

Hier geben wir den Formattyp als Integer-32 Bit an und extrahieren die Daten mit der Funktion 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

Verwandter Artikel - Python File