Python, gestione files

Autore:[Antonio Gallonetto]

Python ci permette di interagire in modo molto facile per creare, leggere e modificare i nostri files, in questo modo possiamo interagire con i nostri archivi senza alcun problema utilizzando python.

La funzione open()

La funzione open ci permette di aprire un canale di comunicazione con il nostro archivio, se l’archivio non esiste lo crea.

Forma Semplice della funzione open()

descrittoreFile=open('NomeFile', 'modoDiApertura')
operazioni sul file
descrittoreFile.close()

Nel caso non si indichi il modo di apertura quello standard è di sola lettura e solo testo.

La funzione restituisce un descrittore del file, è un po’ come avere un’etichetta con la quale indicare il canale di comunicazione tra il nostro software e il file che si trova sulla memoria di massa.

Il canale di comunicazione quando abbiamo terminato l’utilizzo deve essere chiuso, descrittoreFile.close(). Questo procede con la scrittura dei dati sul dispositivo e la rimozione del puntatore al file.

Nel caso nel quale il descrittore del file venga associato ad un altro file, prima viene chiuso automaticamente e poi riaperto associandolo al nuovo file.

Modo di apertura del file

Esistono vari modi per aprire questo canale di comunicazione:

Ulteriori parametri nell’apertura del file

Oltre al nome del file e al modo di apertura, abbiamo a disposizione i seguenti parametri opzionali:

buffering

Il buffering, permette di indicare un valore numerico in bytes della dimensione di memoria dedicata per i dati da leggere e scrivere.

Un valore speciale è lo 0 che disattiva il buffer, ed è permesso solo nella modalità binary. Mentre applicabile ai soli file di testo è il valore 1 che indica una riga alla volta.

Questa funzionalità può essere utile quando l’applicazione riceve una grande quantità di dati, che nel caso di un buffer di default troppo piccolo potrebbe riempirlo completamente e i dati che arriverebbero successivamente andrebbero persi finchè il nostro contenitore non sarà nuovamente vuoto e quindi nuovamente riempibile. In questo caso un buffer più grande potrebbe essere particolarmente utile.

encoding

Per i caratteri di testo la codifica è particolarmente importante, una codifica troppo semplice come ad esempio quella ascii che utilizza solo 7 bit potrebbe essere poco rappresentativa dell’alfabeto che stiamo usando e in questo caso alcuni caratteri potrebbero non essere rappresentati come nel nostro caso quelli accentati.

La codifica è la mappa che permette di convertire un carattere in un numero comprensibile ad un calcolatore. Storicamente la codifica utilizzata è quella ascii a 7 bit, nella quale molti caratteri non trovano posto, la versione a 8 bit indicata come utf-8 è una codifica molto più rappresentativa.

La codifica standard nell’apertura dei files in python è utf-8 e quindi perfettamente rappresentativa per la lingua italiana.

La codifica in ogni caso è particolarmente utile indicarla esplicitamente, soprattutto nel caso nel quale cambino le specifiche dell’implementazione del linguaggio.

errors

Gestione degli errori nella lettura dei files disponibili:

Esempio utilizzando encoding e errors

Nell’esempio seguente andremo a scrivere in un file i caratteri accentati ò ù à con la codifica UTF-8, quindi in grado di rappresentarli e poi andremo a leggerli con una codifica ascii che non è in grado di rappresentarli, e i caratteri non rappresentati andiamo a sostituirli con un punto di domanda.

f = open('test.txt', "w",encoding='UTF-8') # apriamo il file in scrittura
f.write("o accentata ò -- u accentata ù -- a accentata à")
f.close()
f = open('test.txt', "r",encoding='ascii',errors="replace") 
print(f.read())
f.close()

newline

In Windows, Macos e Linux la fine della riga e il ritorno a capo sono gestiti in maniera differente. I primi calcolatori utilizzavano le sequenze di codici ascii per pilotare le periferiche, ad esempio terminali a a caratteri, stampanti, ad esempio, per far terminare una pagina e mandare la stampante alla pagina successiva si inviava un codice di escape (27) seguito da un linefeed (10). Da questo deriva la diversa implementazione, di seguito le varie soluzioni nei vari sistemi perativi.

Gestione del ritorno a capo nei vari sistemi operativi:

Gestione del ritorno a capo in python I possibili valori sono i seguenti:

Di default python è impostato sulla stringa vuota quindi interpreta tutte le possibili soluzioni.

closefd

closefd è utilizzato quando si passa alla funzione open un descrittore di un file e si vuole che venga mantenuto aperto, in questo caso impostandolo a false.

opener

opener è una speciale funzione definita dall’utente, con la seguente forma opener(path, flags). In questo modo possiamo gestire come avviene l’apertura del file, ad esempio relativa alla posizione nella quale si trova l’applicazione, oppure con particolari flag.