Frage Wie lese ich in Python eine Datei Zeile für Zeile in eine Liste?


Wie lese ich jede Zeile einer Datei in Python und speichere jede Zeile als Element in einer Liste?

Ich möchte die Datei Zeile für Zeile lesen und jede Zeile an das Ende der Liste anhängen.


1694
2017-07-18 22:25


Ursprung


Antworten:


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] 

1649
2017-07-18 22:28



Sehen Eingabe und Ausgabe:

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

oder mit dem Entfernen des Newline Charakters:

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

Anmerkung des Herausgebers: Der Whitespace-Stripping-Befehl dieser Antwort line.strip(), wie es Janus Troelsens Kommentar andeutete, würde es entfernen alle führenden und nachlaufenden Leerzeichen, nicht nur das Nachlaufende \n.


779
2017-07-18 22:28



Dies ist expliziter als notwendig, tut aber, was Sie wollen.

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

367
2017-07-18 22:27



Dies ergibt ein "Array" von Zeilen aus der Datei.

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

206
2017-07-18 22:27



Wenn du willst \n inbegriffen:

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

Wenn du nicht willst \n inbegriffen:

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

150
2018-03-02 04:22



Sie könnten einfach Folgendes tun, wie es vorgeschlagen wurde:

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

Beachten Sie, dass dieser Ansatz zwei Nachteile hat:

1) Sie speichern alle Zeilen im Speicher. Im Allgemeinen ist das eine sehr schlechte Idee. Die Datei könnte sehr groß sein, und Sie könnten nicht genügend Arbeitsspeicher haben. Selbst wenn es nicht groß ist, ist es einfach eine Verschwendung von Speicher.

2) Dies ermöglicht nicht die Verarbeitung jeder Zeile, während Sie sie lesen. Wenn Sie Ihre Linien danach bearbeiten, ist dies nicht effizient (erfordert zwei Durchgänge und nicht einen).

Ein besserer Ansatz für den allgemeinen Fall wäre folgender:

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

Wo Sie Ihre Prozessfunktion beliebig definieren. Beispielsweise:

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

(Die Umsetzung der Superman Der Unterricht ist für dich eine Übung).

Dies funktioniert gut für jede Dateigröße und Sie gehen durch Ihre Datei in nur 1 Durchlauf. In der Regel funktionieren generische Parser.


91
2018-02-25 09:13



Wenn Sie die Datei nicht schließen möchten, funktioniert dieser One-Liner:

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

Das traditionell Weg:

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

Verwenden with (empfohlen):

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

61
2018-04-20 05:53



Dies sollte den offenen Befehl einkapseln.

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

38
2017-10-28 15:40