Wie man eine Datei Zeile für Zeile in eine Liste in Python einliest

Jinku Hu 10 Oktober 2023
  1. readlines um die Datei Zeile für Zeile in Python zu lesen
  2. Iterieren Sie über die Datei-Methode, um eine Datei Zeile für Zeile in Python zu lesen
  3. file.read Methode, um die Datei Zeile für Zeile in Python zu lesen
  4. Vergleich verschiedener Methoden beim Lesen einer Datei Zeile für Zeile in Python
Wie man eine Datei Zeile für Zeile in eine Liste in Python einliest

Angenommen, wir haben eine Datei mit dem untenstehenden Inhalt,

Line One: 1
Line Two: 2
Line Three: 3
Line Four: 4
Line Five: 5

Wir müssen den Dateiinhalt Zeile für Zeile in eine Liste einlesen, ["Line One: 1", "Line Two: 2", "Line Three: 3", "Line Four: 4", "Line Five: 5"].

Im Folgenden werden wir verschiedene Methoden vorstellen, um eine Datei Zeile für Zeile in eine Liste einzulesen.

readlines um die Datei Zeile für Zeile in Python zu lesen

readlines gibt eine Liste von Zeilen aus dem Stream zurück.

>>> 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']

Das Endzeichen \n ist ebenfalls in der Zeichenkette enthalten und könnte mit str.rstrip('\n') entfernt werden.

>>> 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']

Iterieren Sie über die Datei-Methode, um eine Datei Zeile für Zeile in Python zu lesen

Wir könnten über die Datei iterieren, um sie Zeile für Zeile zu lesen, anstatt readlines zu benutzen.

>>> 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']

Diese Methode ist viel besser als die obige Methode aus der Perspektive des Speicherverbrauchs. Die readlines Methode hält alle Zeilen der Datei im Speicher, aber die Interationsmethode nimmt nur eine Zeile des Dateiinhalts mit in den Speicher und verarbeitet sie. Sie wird bevorzugt, wenn die Dateigröße super groß ist, um MemoryError zu vermeiden.

file.read Methode, um die Datei Zeile für Zeile in Python zu lesen

file.read(size=-1, /) liest aus der Datei bis EOF, wenn size nicht gesetzt ist. Wir könnten die Zeilen davon mit der Funktion str.splitlines trennen.

>>> with open(filePath, 'r') as f:
	f.read().splitlines()

	
['Line One: 1', 'Line Two: 2', 'Line Three: 3', 'Line Four: 4', 'Line Five: 5']

Das Ergebnis enthält nicht das Endzeichen \n in der Standardmethode str.splitlines. Aber Sie könnten \n einschließen, wenn der keepends Parameter auf True gesetzt ist.

>>> 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']

Vergleich verschiedener Methoden beim Lesen einer Datei Zeile für Zeile in Python

Wir werden die Effizienzleistung zwischen verschiedenen Methoden vergleichen, die in diesem Artikel vorgestellt werden. Wir erhöhen die Anzahl der Zeilen in der getesteten Datei auf 8000, um den Leistungsunterschied leicht vergleichen zu können.

>>> 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

Die readlines() Methode ist etwas besser als die Datei-Iterationsmethode, und file.read().splitlines() ist die effizienteste Methode mit einer Marge von mehr als 25% im Vergleich zu den beiden anderen Methoden.

Aber, wenn in der BigData Anwendung, wo der Speicher der Constrainer ist, ist die Datei-Iterationsmethode die beste, wie oben erklärt.

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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 Facebook

Verwandter Artikel - Python String