Utilizzo file di testo:

Sommario
I file di testo sono composti da sequenze di byte che rappresentano i caratteri codificati in forma numerica secondo una qualche convenzione (ad esempio ASCII, CP1252, ISO-8851-1, la vecchia CP437 del DOS, o la più nuova UTF-8).

In ambiente Windows (e più anticamente DOS) ogni riga di testo termina con due byte di valore 13 e 10  (0D e 0A in esadecimale) chiamati CR e LF (ritorno carrello e avanzamento riga), che in Python si indicano anche con la stringa "\r\n". Il "\r" viene automaticamente aggiunto in scrittura e tolto in lettura, mentre la gestione del "\n" è lasciata al programmatore, che lo deve specificare in scrittura quando vuole indicare un fine riga, e togliere dalla fine delle stringhe in lettura.

Le righe di un file di testo vengono lette o scritte in modo sequenziale dalla prima all'ultima.

Per prima cosa si deve istanziare un oggetto file, associandolo ad una variabile, e indicando il nome del file reale e il modo di accesso (r = lettura, w = scrittura, a = append):

    f = open(r"c:\dati.txt", "r")


Se il file è aperto in lettura e non esiste viene generato un errore. Se il file è aperto in scrittura, se non esiste viene automaticamente creato vuoto, se esiste viene sovrascritto. Aprendolo in append si possono aggiungere nuove stringhe alla fine delle precedenti.

Se lo si è aperto in scrittura o in append si possono scrivere le diverse stringhe con:

    f.write("STRINGA\n")


Il \n finale aggiunge un ritorno a capo, altrimenti la successiva write scriverebbe di seguito alla prima.
Se invece il file viene aperto in lettura si possono leggere le diverse stringhe con:

    linea = f.readline()


Alla fine si chiude il file:

    f.close()


In lettura le stringhe contengono il carattere line-feed (chr(10)) finale (indicato in Python con "\n"), per cui una riga vuota risulta comunque lunga 1 carattere. La fine file è determinabile anche dal fatto che viene ritornata una stringa nulla. Per eliminare i caratteri line-feed si usa il metodo rstrip degli oggetti stringa:

    linea = f.readline()
linea = linea.rstrip("\n")

Me e' ancora meglio:

    linea = f.readline().rstrip("\n")


Iteratore:
In Python un file è un oggetto iterabile, quindi la lettura può avvenire automaticamente sotto il controllo dell'istruzione FOR:

    f = open(r"c:\dati.txt", "r")
for linea in f:
linea = linea.rstrip("\n")
print linea
f.close()


Si possono anche leggere tutte le righe contemporaneamente, nell'esempio seguente righe alla fine e' una lista di stringhe, e ci sono diversi modi per eliminare i caratteri line-feed, compreso l'uso della funzione anonima lambda associata alla funzione map per, applicare la funzione rstrip ad ogni elemento:

    righe = open(r"c:\dati.txt", "r").readlines()
righe = map( (lambda x: x.rstrip("\n")), righe )


Ed infine, visto che il file e' iterabile, e che map itera sulle sequenze, e' possibile racchiudere tutto in un'unica riga che: apre e chiude il file, lo legge riga per riga, toglie i caratteri di line-feed e restituisce una lista di stringhe:

    righe = map( (lambda x: x.rstrip("\n")), open("dati.txt", "r") ) 




Riferimenti esterni moduli: [metodi stringa] [built-in] [funzioni oggetto file]