Articles

GeeksforGeeks

Prequisiti:

  • Modalità di accesso
  • Aprire un file
  • Chiudere un file

Python fornisce funzioni incorporate per creare, scrivere e leggere file. Ci sono due tipi di file che possono essere gestiti in python, file di testo normali e file binari (scritti in linguaggio binario, 0 e 1). In questo articolo, studieremo la lettura riga per riga di un file.

Lettura riga per riga

Utilizzo di readlines()

readlines() è usata per leggere tutte le righe in una volta sola e poi restituirle come ogni riga un elemento di stringa in una lista. Questa funzione può essere usata per piccoli file, poiché legge l’intero contenuto del file in memoria, poi lo divide in linee separate. Possiamo iterare la lista e togliere il carattere newline ‘\n’ usando la funzione strip().

Esempio:

Python3

L =
file1 =open('myfile.txt', 'w')
file1.writelines(L)
file1.close()

file1 =open('myfile.txt', 'r')
Lines =

file1.readlines()
count =0

forline inLines:
count +=

1
print("Line{}: {}".format(count, line.strip()))



Output:

Line1: GeeksLine2: forLine3: Geeks

Utilizzando readline()

la funzione readline() legge una riga del file e la restituisce sotto forma di stringa. Prende un parametro n, che specifica il numero massimo di byte che saranno letti. Tuttavia, non legge più di una linea, anche se n supera la lunghezza della linea. Sarà efficiente quando si legge un file di grandi dimensioni perché invece di recuperare tutti i dati in una volta sola, li recupera riga per riga. readline() restituisce la riga successiva del file che contiene un carattere newline alla fine. Inoltre, se viene raggiunta la fine del file, restituisce una stringa vuota.

Esempio:

Python3

L =
file1 =open('myfile.txt', 'w')
file1.writelines((L))
file1.close()
file1 =open('myfile.txt', 'r')
count =0
whileTrue:

count +=1
line =file1.readline()
ifnotline:
break
print("Line{}: {}".format(count, line.strip()))
file1.close()



Output:

Line1 GeeksLine2 forLine3 Geeks

Utilizzando il ciclo for

Un oggetto iterabile è restituito dalla funzione open() mentre si apre un file. Questo modo finale di leggere un file riga per riga include l’iterazione di un oggetto file in un ciclo for. Facendo questo, stiamo approfittando di una funzione built-in di Python che ci permette di iterare sull’oggetto file implicitamente usando un ciclo for in combinazione con l’uso dell’oggetto iterabile. Questo approccio richiede meno righe di codice, che è sempre la migliore pratica da seguire.

Esempio:

Python3

L =
file1 =open('myfile.txt', 'w')
file1.writelines(L)
file1.close()
file1 =open('myfile.txt', 'r')
count =0
print("Using for loop")

forline in

file1:
count +=1
print("Line{}: {}".format(count, line.strip()))
file1.close()



Output:

Using for loopLine1: GeeksLine2: forLine3: Geeks

Con dichiarazione

Negli approcci precedenti, ogni volta che il file viene aperto deve essere chiuso esplicitamente. Se ci si dimentica di chiudere il file, si possono introdurre diversi bug nel codice, cioè molte modifiche nei file non hanno effetto fino a quando il file non viene chiuso correttamente. Per evitare questo si può usare l’istruzione With. L’istruzione With in Python è usata nella gestione delle eccezioni per rendere il codice più pulito e molto più leggibile. Semplifica la gestione di risorse comuni come i flussi di file. Osservate il seguente esempio di codice su come l’uso di with statement rende il codice più pulito. Non c’è bisogno di chiamare file.close() quando si usa with the statement. Lo stesso with the statement assicura una corretta acquisizione e rilascio delle risorse.

Esempio:

Python3

L =
with

open("myfile.txt", "w") as fp:

fp.writelines(L)
count =0
print("Using readlines()")
with open("myfile.txt") as fp:
Lines =

fp.readlines()
forline inLines:
count +=1
print("Line{}: {}".format(count, line.strip()))
count =0
print("\nUsing readline()")
with open("myfile.txt") as fp:
whileTrue:
count +=

1
line =fp.readline()
ifnotline:
break
print("Line{}: {}".format(count, line.strip()))
count =0
print("\nUsing for loop")
with open("myfile.txt") as fp:
forline in

fp:

count +=1
print("Line{}: {}".format(count, line.strip()))



Output:

Using readlines()Line1: GeeksLine2: forLine3: GeeksUsing readline()Line1: GeeksLine2: forLine3: GeeksUsing for loopLine1: GeeksLine2: forLine3: Geeks

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *