Come leggere un file riga per riga ad una lista in Python
-
readlines
per leggere il file riga per riga in Python - Iterate sul metodo file per leggere un file riga per riga in Python
-
Metodo
file.read
per leggere il file riga per riga in Python - Confronto di diversi metodi nella lettura di un file riga per riga in Python
Supponiamo di avere un file con il contenuto sottostante,
Line One: 1
Line Two: 2
Line Three: 3
Line Four: 4
Line Five: 5
Dobbiamo leggere il contenuto del file riga per riga in una lista, ["Line One: 1", "Line Two: 2", "Line Three: 3", "Line Four: 4", "Line Five: 5"]
.
Introdurremo diversi metodi per leggere un file riga per riga in una lista qui sotto.
readlines
per leggere il file riga per riga in Python
readlines
restituisce una lista di linee dal flusso.
>>> filePath = r"/your/file/path"
>>> with open(filePath, 'r', encoding='utf-8') as f:
f.readlines()
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']
Anche il carattere finale \n
è incluso nella stringa e può essere rimosso con str.rstrip('\n')
.
>>> with open(filePath, 'r', encoding='utf-8') as f:
[_.rstrip('\n') for _ in f.readlines()]
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
Iterate sul metodo file per leggere un file riga per riga in Python
Potremmo iterare sul file per leggerlo riga per riga, piuttosto che usare readlines
.
>>> with open(filePath, 'r', encoding='utf-8') as f:
[_.rstrip('\n') for _ in f]
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
Questo metodo è molto meglio del metodo precedente dal punto di vista dell’uso della memoria. Il metodo readlines
tiene tutte le linee del file in memoria, ma il metodo dell’interazione porta solo una linea del contenuto del file in memoria e la elabora. È preferibile se la dimensione del file è super grande per evitare l’errore di memoria.
Metodo file.read
per leggere il file riga per riga in Python
file.read(size=-1, /)
legge dal file fino a EOF se size
non è impostato. Potremmo dividere le linee da esso utilizzando la funzione str.splitlines
.
>>> with open(filePath, 'r') as f:
f.read().splitlines()
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']
Il risultato non include il carattere finale \n
nel metodo predefinito str.splitlines
. Ma si potrebbe includere \n
se il parametro keepends
è impostato per essere True
.
>>> with open(filePath, 'r') as f:
f.read().splitlines(keepends=True)
['Line One: 1\n', 'Line Two: 2\n', 'Line Three: 3\n', 'Line Four: 4\n', 'Line Five: 5']
Confronto di diversi metodi nella lettura di un file riga per riga in Python
Confronteremo le prestazioni di efficienza tra i diversi metodi introdotti in questo articolo. Aumentiamo il numero di righe nel file testato a 8000
per confrontare facilmente la differenza di prestazioni.
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
f.readlines()''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
16.36330720000001
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
[_ for _ in f]''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
18.37279060000003
>>> timeit.timeit('''with open(filePath, 'r', encoding='utf-8') as f:
f.read().splitlines()''',
setup='filePath=r"C:\Test\Test.txt"',
number = 10000)
12.122660100000019
Il metodo readlines()
è leggermente migliore del metodo di iterazione dei file, e file.read().splitlines()
è il metodo più efficiente con un margine di oltre il 25% rispetto agli altri due metodi.
Ma, se nell’applicazione BigData
dove la memoria è il vincolo, il metodo di iterazione dei file è il migliore, come spiegato sopra.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArticolo correlato - Python String
- Come controllare una stringa è vuota in modo pitonico
- Converti una stringa in nome variabile in Python
- Come rimuovere gli spazi bianchi in una stringa in Python
- Estrai numeri da una stringa in Python
- Come convertire una stringa in datario in Python
- Come convertire una stringa in minuscola in Python 2 e 3