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
Next Section - Esercizi