Python io – BytesIO, StringIO

Das Python io-Modul ermöglicht es uns, die dateibezogenen Ein- und Ausgabeoperationen zu verwalten. Der Vorteil der Verwendung des IO-Moduls besteht darin, dass die verfügbaren Klassen und Funktionen es uns ermöglichen, die Funktionalität zu erweitern, um das Schreiben von Unicode-Daten zu ermöglichen.

Python IO-Modul

Es gibt viele Möglichkeiten, wie wir das io-Modul verwenden können, um in Python Stream- und Pufferoperationen durchzuführen. Wir werden hier viele Beispiele demonstrieren, um den Punkt zu beweisen. Lass uns anfangen.

Python BytesIO

Genau wie bei Variablen können Daten als Bytes in einem im Arbeitsspeicher befindlichen Puffer gespeichert werden, wenn wir die Byte-IO-Operationen des io-Moduls verwenden. Hier ist ein Beispielprogramm, das dies demonstriert:

import io

stream_str = io.BytesIO(b"JournalDev Python: \x00\x01")
print(stream_str.getvalue())

Lassen Sie uns die Ausgabe für dieses Programm ansehen: Die getvalue()-Funktion nimmt einfach den Wert aus dem Puffer als String.

Python StringIO

Sogar StringIO können wir verwenden, das in der Anwendung äußerst ähnlich zu BytesIO ist. Hier ist ein Beispielprogramm:

import io

data = io.StringIO()
data.write('JournalDev: ')
print('Python.', file=data)

print(data.getvalue())

data.close()

Lassen Sie uns die Ausgabe für dieses Programm sehen: Beachten Sie, dass wir den Puffer sogar nach Abschluss des Puffergebrauchs geschlossen haben. Dies hilft, Pufferspeicher zu sparen, da sie Daten im Arbeitsspeicher speichern. Außerdem haben wir die print-Methode mit einem optionalen Argument verwendet, um einen IO-Stream der Variable anzugeben, was perfekt mit einer Druckanweisung kompatibel ist.

Lesen mit StringIO

Nachdem wir einige Daten in den StringIO-Puffer geschrieben haben, können wir sie auch lesen. Schauen wir uns einen Code-Schnipsel an:

import io

input = io.StringIO('This goes into the read buffer.')
print(input.read())

Lassen Sie uns die Ausgabe für dieses Programm sehen:

Datei lesen mit StringIO

Es ist auch möglich, eine Datei zu lesen und sie als Bytes über ein Netzwerk zu streamen. Das io-Modul kann verwendet werden, um eine Mediendatei wie ein Bild in Bytes zu konvertieren. Hier ist ein Beispielprogramm:

import io

file = io.open("whale.png", "rb", buffering = 0)
print(file.read())

Lassen Sie uns die Ausgabe für dieses Programm sehen: Damit dieses Programm ausgeführt werden kann, befand sich eine wal.png-Bilddatei in unserem aktuellen Verzeichnis.

io.open() vs os.open()

Die Funktion io.open() ist eine bevorzugte Methode zur Durchführung von Ein-/Ausgabeoperationen, da sie als High-Level-Schnittstelle für Datei-E/A-Vorgänge entwickelt wurde. Sie umhüllt den Dateideskriptor auf Betriebssystemebene in ein Objekt, das wir auf eine Python-artige Weise verwenden können. Die Funktion os.open() kümmert sich um den niedrigeren POSIX-Systemaufruf. Sie nimmt POSIX-basierte Argumente entgegen und gibt einen Dateideskriptor zurück, der die geöffnete Datei repräsentiert. Sie gibt kein Dateiobjekt zurück; der zurückgegebene Wert wird keine Funktionen wie read() oder write() haben. Insgesamt ist die Funktion io.open() lediglich ein Wrapper über die Funktion os.open(). Die Funktion os.open() setzt auch Standardkonfigurationen wie Flags und Modus, während io.open() dies nicht tut und stattdessen von den übergebenen Werten abhängt.

Fazit

In dieser Lektion haben wir einfache Operationen des Python-IO-Moduls studiert und wie wir Unicode-Zeichen mit BytesIO verwalten können. Wenn Sie jedoch vollständige Dateioperationen wie Löschen und Kopieren einer Datei durchführen möchten, lesen Sie Python-Datei lesen. Referenz: API-Dokumentation.

Source:
https://www.digitalocean.com/community/tutorials/python-io-bytesio-stringio