Domanda In Python, come faccio a leggere un file riga per riga in un elenco?


Come leggo ogni riga di un file in Python e memorizzo ogni riga come un elemento in un elenco?

Voglio leggere il file riga per riga e aggiungere ogni riga alla fine dell'elenco.


1693
2017-07-18 22:25


origine


risposte:


with open(fname) as f:
    content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content] 

1648
2017-07-18 22:28



Vedere Input e Ouput:

with open('filename') as f:
    lines = f.readlines()

o con la rimozione del carattere di nuova riga:

lines = [line.rstrip('\n') for line in open('filename')]

Nota del redattore: il comando originale di spaziatura degli spazi bianchi di questa risposta, line.strip(), come suggerito dal commento di Janus Troelsen, rimuoverebbe tutto in testa e in coda spazio bianco, non solo il finale \n.


779
2017-07-18 22:28



Questo è più esplicito del necessario, ma fa ciò che vuoi.

with open("file.txt", "r") as ins:
    array = []
    for line in ins:
        array.append(line)

367
2017-07-18 22:27



Questo produrrà un "array" di linee dal file.

lines = tuple(open(filename, 'r'))

206
2017-07-18 22:27



Se vuoi il \n incluso:

with open(fname) as f:
    content = f.readlines()

Se non vuoi \n incluso:

with open(fname) as f:
    content = f.read().splitlines()

150
2018-03-02 04:22



Potresti semplicemente fare quanto segue, come è stato suggerito:

with open('/your/path/file') as f:
    my_lines = f.readlines()

Nota che questo approccio ha 2 aspetti negativi:

1) Memorizza tutte le linee in memoria. Nel caso generale, questa è una pessima idea. Il file potrebbe essere molto grande e potresti esaurire la memoria. Anche se non è grande, è semplicemente uno spreco di memoria.

2) Ciò non consente l'elaborazione di ogni riga mentre le leggi. Quindi, se si elaborano le linee dopo questo, non è efficiente (richiede due passaggi anziché uno).

Un approccio migliore per il caso generale sarebbe il seguente:

with open('/your/path/file') as f:
    for line in f:
        process(line)

Dove definisci la tua funzione di processo come preferisci. Per esempio:

def process(line):
    if 'save the world' in line.lower():
         superman.save_the_world()

(L'implementazione del Superman la classe è lasciata come esercizio per te).

Funzionerà bene per qualsiasi dimensione di file e passerai attraverso il tuo file in un solo passaggio. Questo è in genere il funzionamento dei parser generici.


91
2018-02-25 09:13



Se non ti interessa chiudere il file, questo one-liner funziona:

lines = open('file.txt').read().split("\n")

Il tradizionale modo:

fp = open('file.txt') # Open file on read mode
lines = fp.read().split("\n") # Create a list containing all lines
fp.close() # Close file

utilizzando with (consigliato):

with open('file.txt') as fp:
    lines = fp.read().split("\n")

61
2018-04-20 05:53



Questo dovrebbe incapsulare il comando aperto.

array = []
with open("file.txt", "r") as f:
  for line in f:
    array.append(line)

38
2017-10-28 15:40



Dati in lista

Supponiamo di avere un file di testo con i nostri dati come nelle seguenti righe:

Contenuto del file di testo:

   line 1
   line 2
   line 3
  • Apri il cmd nella stessa directory (fai clic con il tasto destro del mouse e scegli cmd o PowerShell)
  • Correre python e nell'interprete scrivi:

Lo script Python

>>> with open("myfile.txt", encoding="utf-8") as file:
...     x = [l.strip() for l in file]
>>> x
['line 1','line 2','line 3']

Utilizzando append

x = []
with open("myfile.txt") as file:
    for l in file:
        x.append(l.strip())

O...

>>> x = open("myfile.txt").read().splitlines()
>>> x
['line 1', 'line 2', 'line 3']

O...

>>> y = [x.rstrip() for x in open("my_file.txt")]
>>> y
['line 1','line 2','line 3']

36
2018-04-26 04:57