logo

Leggere un file riga per riga in Python

Prerequisiti:

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



Metodo 1: leggere un file riga per riga utilizzando readlines()

readlines() viene utilizzato per leggere tutte le righe in una volta sola e quindi restituirle come ogni riga un elemento stringa in un elenco. Questa funzione può essere utilizzata per file di piccole dimensioni, poiché legge l'intero contenuto del file nella memoria, quindi lo divide in righe separate. Possiamo scorrere l'elenco ed eliminare il carattere ' ' di nuova riga utilizzando la funzione strip().

Esempio:

Python3








# Python code to> # demonstrate readlines()> L>=> [>'Geeks '>,>'for '>,>'Geeks '>]> # writing to file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines(L)> file1.close()> # Using readlines()> file1>=> open>(>'myfile.txt'>,>'r'>)> Lines>=> file1.readlines()> count>=> 0> # Strips the newline character> for> line>in> Lines:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))>

>

>

Produzione:

Line1: Geeks Line2: for Line3: Geeks>

La complessità temporale del codice Python specificato è O(n), dove n è il numero totale di righe nel file

La complessità dello spazio ausiliario del codice è O(n), dove n è il numero totale di righe nel file.

Metodo 2: leggere un file riga per riga utilizzando readline()

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

Esempio:

APPROCCIO PASSO DOPO PASSO:

  1. Crea una lista L con tre elementi stringa contenenti caratteri di nuova riga.
  2. Apri un file denominato myfile.txt in modalità scrittura e assegnalo alla variabile file1.
  3. Scrivere il contenuto della lista L nel file utilizzando il metodo writelines() dell'oggetto file file1.
  4. Chiudere l'oggetto file file1 utilizzando il metodo close().
  5. Apri il file denominato myfile.txt in modalità lettura e assegnalo alla variabile file1.
  6. Inizializza il conteggio di una variabile su 0.
  7. Inizia un ciclo infinito.
  8. Incrementa il conteggio delle variabili di 1 in ogni iterazione del ciclo.
  9. Leggi la riga successiva dall'oggetto file file1 utilizzando il metodo readline() e assegnala alla variabile riga.
  10. Controlla se la variabile di riga è vuota. Se è vuoto significa che è stata raggiunta la fine del file. In tal caso, esci dal ciclo utilizzando l'istruzione break.
  11. Stampa il valore di count e il contenuto della riga utilizzando il metodo format() della classe string. Il metodo strip() viene utilizzato per rimuovere il carattere di nuova riga alla fine della riga.
  12. Chiudere l'oggetto file file1 utilizzando il metodo close().

Python3

pete davidson




# Python program to> # demonstrate readline()> L>=> [>'Geeks '>,>'for '>,>'Geeks '>]> # Writing to a file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines((L))> file1.close()> # Using readline()> file1>=> open>(>'myfile.txt'>,>'r'>)> count>=> 0> while> True>:> >count>+>=> 1> ># Get next line from file> >line>=> file1.readline()> ># if line is empty> ># end of file is reached> >if> not> line:> >break> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> file1.close()>

>

>

Produzione:

Line1 Geeks Line2 for Line3 Geeks>

Metodo 3: leggere un file riga per riga utilizzando il ciclo for

Un oggetto iterabile viene restituito dalla funzione open() durante l'apertura di un file. Questo modo finale di leggere un file riga per riga include l'iterazione su un oggetto file in un ciclo for. In questo modo stiamo sfruttando una funzione incorporata di Python che ci consente di eseguire un'iterazione sull'oggetto file utilizzando implicitamente un ciclo for in combinazione con l'utilizzo dell'oggetto iterabile. Questo approccio richiede meno righe di codice, che è sempre la migliore pratica degna di essere seguita.

Esempio:

il computer ha inventato quale anno

Python3




# Python program to> # demonstrate reading files> # using for loop> L>=> [>'Geeks '>,>'for '>,>'Geeks '>]> # Writing to file> file1>=> open>(>'myfile.txt'>,>'w'>)> file1.writelines(L)> file1.close()> # Opening file> file1>=> open>(>'myfile.txt'>,>'r'>)> count>=> 0> # Using for loop> print>(>'Using for loop'>)> for> line>in> file1:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Closing files> file1.close()>

>

>

Produzione:

Using for loop Line1: Geeks Line2: for Line3: Geeks>

Metodo 4: leggere un file riga per riga utilizzando il ciclo for e la comprensione delle liste

Una lista di comprensione è costituita da parentesi contenenti l'espressione, che viene eseguita per ciascun elemento insieme al ciclo for per scorrere ciascun elemento. Qui leggeremo il file di testo e stamperemo i dati grezzi incluso il carattere di nuova riga in un altro output in cui abbiamo rimosso tutti i caratteri di nuova riga dall'elenco.

Esempio

Python3


Java genera un numero casuale



with>open>(>'myfile.txt'>) as f:> >lines>=> [line>for> line>in> f]> print>(lines)> # removing the new line characters> with>open>(>'myfile.txt'>) as f:> >lines>=> [line.rstrip()>for> line>in> f]> print>(lines)>

>

>

Produzione:

['Geeks
', 'For
', 'Geeks'] ['Geeks', 'For', 'Geeks']>

Con dichiarazione

Negli approcci di cui sopra, ogni volta che il file viene aperto è necessario chiuderlo esplicitamente. Se ci si dimentica di chiudere il file, potrebbero essere introdotti diversi bug nel codice, ovvero molte modifiche nei file non diventano effettive finché il file non viene chiuso correttamente. Per evitare ciò è possibile utilizzare la dichiarazione. L'istruzione With in Python viene utilizzata nella gestione delle eccezioni per rendere il codice più pulito e molto più leggibile. Semplifica la gestione delle risorse comuni come i flussi di file. Osservare il seguente esempio di codice su come l'uso dell'istruzione with rende il codice più pulito. Non è necessario chiamare file.close() quando si utilizza con l'istruzione. La dichiarazione stessa garantisce la corretta acquisizione e rilascio delle risorse.

Esempio:

Python3




# Python program to> # demonstrate with> # statement> L>=> [>'Geeks '>,>'for '>,>'Geeks '>]> # Writing to file> with>open>(>'myfile.txt'>,>'w'>) as fp:> >fp.writelines(L)> # using readlines()> count>=> 0> print>(>'Using readlines()'>)> with>open>(>'myfile.txt'>) as fp:> >Lines>=> fp.readlines()> >for> line>in> Lines:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Using readline()> count>=> 0> print>(>' Using readline()'>)> with>open>(>'myfile.txt'>) as fp:> >while> True>:> >count>+>=> 1> >line>=> fp.readline()> >if> not> line:> >break> >print>(>'Line{}: {}'>.>format>(count, line.strip()))> # Using for loop> count>=> 0> print>(>' Using for loop'>)> with>open>(>'myfile.txt'>) as fp:> >for> line>in> fp:> >count>+>=> 1> >print>(>'Line{}: {}'>.>format>(count, line.strip()))>

>

>

Produzione:

Using readlines() Line1: Geeks Line2: for Line3: Geeks Using readline() Line1: Geeks Line2: for Line3: Geeks Using for loop Line1: Geeks Line2: for Line3: Geeks>