Metodi Alternativi per Leggere File¶
Ancora una volta, consideriamo il contenuto del file qbdata.txt.
Colt McCoy QB CLE 135 222 1576 6 9 60.8% 74.5 Josh Freeman QB TB 291 474 3451 25 6 61.4% 95.9 Michael Vick QB PHI 233 372 3018 21 6 62.6% 100.2 Matt Schaub QB HOU 365 574 4370 24 12 63.6% 92.0 Philip Rivers QB SD 357 541 4710 30 13 66.0% 101.8 Matt Hasselbeck QB SEA 266 444 3001 12 17 59.9% 73.2 Jimmy Clausen QB CAR 157 299 1558 3 9 52.5% 58.4 Joe Flacco QB BAL 306 489 3622 25 10 62.6% 93.6 Kyle Orton QB DEN 293 498 3653 20 9 58.8% 87.5 Jason Campbell QB OAK 194 329 2387 13 8 59.0% 84.5 Peyton Manning QB IND 450 679 4700 33 17 66.3% 91.9 Drew Brees QB NO 448 658 4620 33 22 68.1% 90.9 Matt Ryan QB ATL 357 571 3705 28 9 62.5% 91.0 Matt Cassel QB KC 262 450 3116 27 7 58.2% 93.0 Mark Sanchez QB NYJ 278 507 3291 17 13 54.8% 75.3 Brett Favre QB MIN 217 358 2509 11 19 60.6% 69.9 David Garrard QB JAC 236 366 2734 23 15 64.5% 90.8 Eli Manning QB NYG 339 539 4002 31 25 62.9% 85.3 Carson Palmer QB CIN 362 586 3970 26 20 61.8% 82.4 Alex Smith QB SF 204 342 2370 14 10 59.6% 82.1 Chad Henne QB MIA 301 490 3301 15 19 61.4% 75.4 Tony Romo QB DAL 148 213 1605 11 7 69.5% 94.9 Jay Cutler QB CHI 261 432 3274 23 16 60.4% 86.3 Jon Kitna QB DAL 209 318 2365 16 12 65.7% 88.9 Tom Brady QB NE 324 492 3900 36 4 65.9% 111.0 Ben Roethlisberger QB PIT 240 389 3200 17 5 61.7% 97.0 Kerry Collins QB TEN 160 278 1823 14 8 57.6% 82.2 Derek Anderson QB ARI 169 327 2065 7 10 51.7% 65.9 Ryan Fitzpatrick QB BUF 255 441 3000 23 15 57.8% 81.8 Donovan McNabb QB WAS 275 472 3377 14 15 58.3% 77.1 Kevin Kolb QB PHI 115 189 1197 7 7 60.8% 76.1 Aaron Rodgers QB GB 312 475 3922 28 11 65.7% 101.2 Sam Bradford QB STL 354 590 3512 18 15 60.0% 76.5 Shaun Hill QB DET 257 416 2686 16 12 61.8% 81.3
In aggiunta al ciclo for
, Python fornisce tre metodi per leggere dal file.
Il metodo readline
legge una linea dal file e la ritorna come stringa.
La stringa ritornata da readline
conterrà il carattere di nuova riga alla fine.
Questo metodo ritorna la stringa vuota quando raggiunge la fine del file. Il metodo readlines
ritorna il contenuto dell’intero file come lista di stringhe, dove ogni elemento nella lista rappresenta una linea del file. E’ anche possibile leggere l’intero file in una singola stringa con read
. Tabella 2 riassume questi metodi.
Notiamo che dobbiamo riaprire il file prima di ogni lettura in modo da ricominciare dall’inizio. Ogni file ha un marcatore della posizione corrente di lettura nel file. Ogni volta che il metodo read è chiamato, il marcatore si posiziona a carattere immediatamente seguente l’ultimo carattere ritornato. Nel caso di readline
, il marcatore si sposta al primo carattere della linea successiva nel file. Nel caso di read
o readlines
il marcatore si sposta alla fine del file.
>>> infile = open("qbdata.txt", "r")
>>> aline = infile.readline()
>>> aline
'Colt McCoy QB, CLE\t135\t222\t1576\t6\t9\t60.8%\t74.5\n'
>>>
>>> infile = open("qbdata.txt", "r")
>>> linelist = infile.readlines()
>>> print(len(linelist))
34
>>> print(linelist[0:4])
['Colt McCoy QB CLE\t135\t222\t1576\t6\t9\t60.8%\t74.5\n',
'Josh Freeman QB TB\t291\t474\t3451\t25\t6\t61.4%\t95.9\n',
'Michael Vick QB PHI\t233\t372\t3018\t21\t6\t62.6%\t100.2\n',
'Matt Schaub QB HOU\t365\t574\t4370\t24\t12\t63.6%\t92.0\n']
>>>
>>> infile = open("qbdata.txt", "r")
>>> filestring = infile.read()
>>> print(len(filestring))
1708
>>> print(filestring[:256])
Colt McCoy QB CLE 135 222 1576 6 9 60.8% 74.5
Josh Freeman QB TB 291 474 3451 25 6 61.4% 95.9
Michael Vick QB PHI 233 372 3018 21 6 62.6% 100.2
Matt Schaub QB HOU 365 574 4370 24 12 63.6% 92.0
Philip Rivers QB SD 357 541 4710 30 13 66.0% 101.8
Matt Ha
>>>
Consideriamo adesso un altro metodo per leggere il file usando il ciclo while
. Questo è il metodo usato in molti linguaggi di programmazione che non supportano gli iteratori nel for
per leggere i file, ma supportano la modalità seguente.
Alla linea 2, l’istruzione line = infile.readline()
è una prima lettura per consentire al while di valutare la guardia. Il metodo readline
ritorna la stringa vuota se non ci sono più dati nel file. La condizione while line:
significa while il contenuto della linea non è una stringa vuota. Ricordiamoci che una linea vuota in un file, in realtà ha un singolo carattere, il carattere \n
(nuova linea). Per cui l’unica linea veramente vuota è la fine del file.
Infine, nota che l’ultima linea del corpo del ciclo while
effettua una nuova readline
. Questa istruzione riassegna la variabile line
alla prossima linea del file per effettuare un cambio di stato necessario per le iterazioni. Senza tale cambio di stato, ci sarebbe un ciclo infinito che processerebbe continuamente la stessa riga di dati.