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.




(files_while)

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.

Next Section - Scrivere File di Testo