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:
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:
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:
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.