Scrivere File di Testo¶
Uno dei più comuni compiti quando si processano dei dati è leggere dei dati da un file, manipolarli in qualche modo e scrivere il risultato della manipolazione in un nuovo file. Per fare ciò, la funzione open
discussa prima può essere usata per creare un nuovo file preparato per la scrittura. Notiamo che in Tabella 1 l’unica differenza tra l’apertura di un file per la lettura e l’apertura di un file per la scrittura è l’uso della flag 'w'
invece di 'r'
come secondo parametro. Quando apriamo un file per la scrittura, un nuovo file vuoto con quel nome viene creato e reso pronto per accettare dati da scrivere. Come prima, la funzione ritorna un riferimento a un oggetto che rappresenta il nuovo file.
Tabella 2 mostra un metodo addizionale che non abbiamo ancora usato. Il metodo write
permette di aggiungere dati al file. Ricordiamoci che i file di testo contengono sequenze di caratteri. In questo caso è compito del programmatore organizzare il file su più righe, inserendo il carattere \n
nella sequenza di caratteri da scrivere.
Ad esempio, consideriamo nuovamente il file qbdata.txt
. Assumiamo che vogliamo construire un file contenente solo il nome e cognome dei giocatori. Inoltre vorremmo che il cognome sia seguito dal nome, separati da una virgola. Questo tipo di compito è molto comune dal momento che spesso alcuni programmi richiedono un formato dell’input diverso dai dati che abbiamo.
Per costruire questo file, useremo un approccio simile a quello usato sopra. Dopo l’apertura del file, iteriamo sulle linee, dividendo ciascuna riga in parti, scegliendo le parti della riga che ci interessano e poi facendo output nel formato richiesto. Eventualmente l’output viene scritto sul file.
Nel programma che segue stampa le nuove righe create sullo scehrmo ma non le scrive su file.
infile = open("qbdata.txt", "r")
aline = infile.readline()
while aline:
items = aline.split()
dataline = items[1] + ',' + items[0]
print(dataline)
aline = infile.readline()
infile.close()
Possiamo completarlo, scrivendo tali righe su file. Per cominciare, dobbiamo aprire un nuovo file chiamando la funzione open
, outfile = open("qbnames.txt",'w')
, usando la flag 'w'
. Possiamo scegliere qualsiasi file preferiamo. Se il file non esiste, verrà creato. Se invece il file esiste, esso sarà re-inizializzato come file vuoto perdendo tutto il contenuto precedente.
Una volta che il file è stato creato, abbiamo bisogno di chiamare il metodo write
passando la stringa da scrivere. Abbiamo bisogno di usare il carattere nuova riga per disporre le stringhe su più righe, outfile.write(dataline + '\n')
e infine di chiudere il file.
infile = open("qbdata.txt", "r")
outfile = open("qbnames.txt", "w")
aline = infile.readline()
while aline:
items = aline.split()
dataline = items[1] + ',' + items[0]
outfile.write(dataline + '\n')
aline = infile.readline()
infile.close()
outfile.close()
Il contenuto del file qbnames.txt
è il seguente.
McCoy,Colt Freeman,Josh Vick,Michael Schaub,Matt Rivers,Philip Hasselbeck,Matt Clausen,Jimmy Flacco,Joe Orton,Kyle Campbell,Jason Manning,Peyton Brees,Drew Ryan,Matt Cassel,Matt Sanchez,Mark Favre,Brett Garrard,David Manning,Eli Palmer,Carson Smith,Alex Henne,Chad Romo,Tony Cutler,Jay Kitna,Jon Brady,Tom Roethlisberger,Ben Collins,Kerry Anderson,Derek Fitzpatrick,Ryan McNabb,Donovan Kolb,Kevin Rodgers,Aaron Bradford,Sam Hill,Shaun