Python io – BytesIO, StringIO

De Python io-module stelt ons in staat om de bestandsgerelateerde invoer- en uitvoeroperaties te beheren. Het voordeel van het gebruik van de IO-module is dat de beschikbare klassen en functies ons in staat stellen om de functionaliteit uit te breiden om te schrijven naar Unicode-gegevens.

Python IO-module

Er zijn veel manieren waarop we de io-module kunnen gebruiken om stroom- en bufferoperaties uit te voeren in Python. We zullen hier veel voorbeelden demonstreren om het punt te bewijzen. Laten we beginnen.

Python BytesIO

Net zoals we met variabelen doen, kunnen gegevens als bytes worden bewaard in een in-memory buffer wanneer we de Byte IO-operaties van de io-module gebruiken. Hier is een voorbeeldprogramma om dit te demonstreren:

import io

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

Laten we de uitvoer van dit programma zien: De getvalue()-functie haalt gewoon de waarde uit de buffer als een tekenreeks.

Python StringIO

We kunnen zelfs StringIO gebruiken, wat extreem vergelijkbaar is in gebruik met BytesIO. Hier is een voorbeeldprogramma:

import io

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

print(data.getvalue())

data.close()

Laten we de uitvoer voor dit programma zien: Let op dat we zelfs de buffer hebben gesloten nadat we klaar waren met de buffer. Dit helpt buffergeheugen te besparen omdat ze gegevens in het geheugen opslaan. Ook hebben we de print methode gebruikt met een optioneel argument om een IO-stream van de variabele aan te geven, wat perfect compatibel is met een printstatement.

Lezen met StringIO

Zodra we wat gegevens naar de StringIO-buffer schrijven, kunnen we het ook lezen. Laten we eens kijken naar een stukje code:

import io

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

Laten we de uitvoer voor dit programma zien:

Bestand lezen met StringIO

Het is ook mogelijk om een bestand te lezen en het over een netwerk te streamen als Bytes. De io-module kan worden gebruikt om een media-bestand zoals een afbeelding om te zetten naar bytes. Hier is een voorbeeldprogramma:

import io

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

Laten we de uitvoer voor dit programma zien: Om dit programma uit te voeren, hadden we een whale.png afbeelding in onze huidige map.

io.open() vs os.open()

De functie io.open() is een veel geprefereerde manier om I/O-operaties uit te voeren, omdat het is gemaakt als een hoog niveau interface om bestands-I/O uit te voeren. Het wikkelt het bestandsdescriptor op OS-niveau in een object waarvan we gebruik kunnen maken om op een Pythonische manier toegang te krijgen tot het bestand. De os.open() functie behandelt de lagere POSIX-systeemaanroep. Het neemt invoer op basis van POSIX en retourneert een bestandsdescriptor die het geopende bestand vertegenwoordigt. Het retourneert geen bestandsobject; de geretourneerde waarde zal geen read() of write() functies hebben. Over het algemeen is de io.open() functie slechts een wrapper over de os.open() functie. De os.open() functie stelt ook standaardconfiguratie in zoals vlaggen en modus terwijl io.open() dat niet doet en afhankelijk is van de meegegeven waarden.

Conclusie

In deze les hebben we eenvoudige bewerkingen van de Python IO-module bestudeerd en hoe we Unicode-karakters kunnen beheren met BytesIO. Als je echter op zoek bent naar volledige bestandsbewerkingen zoals het verwijderen en kopiëren van een bestand, lees dan python lees bestand. Referentie: API-documentatie

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