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]