Warum liefern Python readlines () zusätzliche ' \ n ' zwischen den Zeilen beim Lesen aus einer Textdatei?


Beste Antwort

Weil es dumm ist. Ich kann mir keine nützliche Anwendung dieser -Funktion vorstellen und habe mich bemüht.

(Siehe Romains Antwort für Ein ernsthafter Ansatz für „Warum genau“, ich muss nur flammen 🙂 Ich kann jedoch einige Problemumgehungen bereitstellen.

Warum akzeptiert es keinen weiteren Parameter (dh „Ende“, der standardmäßig verwendet wird? auf „\ n“ oder ein Bool-Flag (keepnl = True), damit ich wählen kann, das Zeilenende beizubehalten / zu ändern, wenn und nur wenn ich eines benötige, geht dies über mein Verständnis hinaus.

Dies Eine unintuitive „politische Entscheidung“ macht sie praktisch unbrauchbar und anstelle der langsamen und schwer zu verstehenden:

lines = [ ln[:-1] for ln in f.readlines() ]

bevorzuge ich normalerweise

lines = f.read().split("\n")

Für meine Augen viel einfacher. Ich denke, es ist zu spät, um es jetzt zu ändern.

Ja, es gibt die Möglichkeit anderer Zeilenenden, abhängig vom Betriebssystem.

Ich denke, sogar Python-Standardbibliotheken haben ihre Fehler

Antwort

Diese Zeichen sind nicht Extras. Sie sind in der Textdatei vorhanden. Sie markieren die Zeilenenden.

Hier ist eine andere Möglichkeit, eine Textdatei mit dem Namen sample.txt zu lesen, die dies veranschaulicht.

>>> with open("sample.txt") as sample:

... contents = sample.readlines()

... print(contents)

...

["This is line number 1\n", "This is line number 2\n", "This is line number 3\n", "This is line number 4\n", "This is line number 5\n", "This is line number 6\n", "This is line number 7\n", "This is line number 8\n", "This is line number 9\n", "This is line number 10\n", "This is line number 11\n", "This is line number 12\n", "This is line number 13\n", "This is line number 14\n", "This is line number 15\n", "This is line number 16\n", "This is line number 17\n", "This is line number 18\n", "This is line number 19\n", "This is line number 20\n"]

  • Jede Zeile im Druck Die Ausgabe endet mit \n, da sich diese in den Zeilen der Textdatei befanden.
  • Verwenden Sie besser with Wenn Sie eine Datei öffnen, weil dieses Konstrukt das Schließen von Dateien nach der Verwendung veranlasst.
  • Ich stelle fest, dass Sie Ihre Datei file aufgerufen haben. Sie sollten die Verwendung von Namen vermeiden, die Teil der Python-Sprache sind.

Wenn Sie Code möchten, der die neuen Zeilen entfernt, gibt es eine Option:

>>> with open("sample.txt") as sample:

... for line in sample:

... print(line.rstrip())

...

This is line number 1

This is line number 2

This is line number 3

This is line number 4

This is line number 5

This is line number 6

This is line number 7

This is line number 8

This is line number 9

This is line number 10

This is line number 11

This is line number 12

This is line number 13

This is line number 14

This is line number 15

This is line number 16

This is line number 17

This is line number 18

This is line number 19

This is line number 20

Hinweis t Ich habe rstrip verwendet, wodurch Leerzeichen nur am rechten Ende einer Zeichenfolge entfernt werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.