Python io – BytesIO, StringIO

Il modulo io di Python ci permette di gestire le operazioni di input e output relative ai file. Il vantaggio di usare il modulo IO è che le classi e le funzioni disponibili ci permettono di estendere la funzionalità per permettere la scrittura dei dati Unicode.

Modulo IO di Python

Ci sono molti modi in cui possiamo usare il modulo io per eseguire operazioni di stream e buffer in Python. Dimostreremo qui molti esempi per dimostrare il punto. Iniziamo.

Python BytesIO

Proprio come facciamo con le variabili, i dati possono essere tenuti come byte in un buffer in-memory quando usiamo le operazioni Byte IO del modulo io.

Ecco un programma di esempio per dimostrarlo:

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

Vediamo l’output di questo programma:
python IO BytesIO example
La funzione getvalue() prende semplicemente il valore dal Buffer come una stringa.

Python StringIO

Possiamo anche usare StringIO che è estremamente simile nell’uso a BytesIO. Ecco un programma di esempio:

import iodata = io.StringIO()data.write('JournalDev: ')print('Python.', file=data)print(data.getvalue())data.close()

Vediamo l’output di questo programma:
python StringIO example
Nota che abbiamo anche chiuso il buffer dopo aver finito il buffer. Questo aiuta a salvare la memoria del buffer, dato che memorizza i dati in-memoria.

Inoltre, abbiamo usato il metodo print con un argomento opzionale per specificare un flusso IO della variabile, che è perfettamente compatibile con una dichiarazione di stampa.

Lettura usando StringIO

Una volta scritti dei dati nel buffer StringIO, possiamo anche leggerli. Vediamo un frammento di codice:

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

Vediamo l’output di questo programma:
python io module read stringIO data

Lettura di file usando StringIO

È anche possibile leggere un file e mandarlo in streaming su una rete come Bytes. Il modulo io può essere usato per convertire un file multimediale come un’immagine in byte. Ecco un programma di esempio:

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

Vediamo l’output di questo programma:

Per eseguire questo programma, avevamo un’immagine whale.png presente nella nostra directory corrente.

io.open() vs os.open()

La funzione io.open() è un modo molto preferito per eseguire operazioni di I/O poiché è fatta come un’interfaccia di alto livello per eseguire l’I/O dei file. Avvolge il descrittore di file a livello di sistema operativo in un oggetto che possiamo usare per accedere al file in modo pitonico.

La funzione os.open() si occupa delle syscall POSIX di livello inferiore. Prende in ingresso argomenti basati su POSIX e restituisce un descrittore di file che rappresenta il file aperto. Non restituisce un oggetto file; il valore restituito non avrà read() o write() funzioni.

In generale, la funzione io.open() è solo un wrapper sulla funzione os.open(). La funzione os.open() imposta anche la configurazione di default come flags e mode mentre io.open() non lo fa e dipende dai valori che le vengono passati.

Conclusione

In questa lezione, abbiamo studiato semplici operazioni del modulo IO di Python e come possiamo gestire anche i caratteri Unicode con BytesIO. Tuttavia, se state cercando operazioni complete sui file, come cancellare e copiare un file, allora leggete python read file.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *