Varför ger Python readlines () extra ' \ n ' mellan raderna när du läser från en textfil?


Bästa svaret

Eftersom det är dumt. Jag kan inte tänka mig en användbar tillämpning av denna -funktion och jag har försökt hårt.

(Se Romains svar för ett seriöst tillvägagångssätt för ”varför exakt”, jag behöver bara flamma 🙂 Jag kan dock tillhandahålla några lösningar.

Varför accepterar den inte ytterligare en parameter (dvs. ”slut”, som standardvärde till “\ n”, eller en bool-flagga, keepnl = True), så att jag kan välja att behålla / ändra radslut, om, och bara om jag behöver en, går utöver min förståelse.

Detta ointuitivt ”policybeslut” gör det praktiskt taget oanvändbart och istället för långsamt och svårt att förstå:

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

Jag föredrar vanligtvis

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

Mycket enklare för mina ögon. Jag antar att det är för sent att ändra det nu.

Ja, det finns en möjlighet till andra radslut, beroende på operativsystem.

Jag antar att även python-standard-libs har sina brister också.

Svar

Dessa tecken är inte extrafunktioner. De finns i textfilen. De markerar ändarna på raderna.

Här är ett annat sätt att läsa en textfil, kallad sample.txt, som illustrerar.

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

  • Varje rad i den tryckta utgången slutar med \n eftersom de stod i raderna i textfilen.
  • Du skulle vara bättre att använda with när du öppnar en fil eftersom den här konstruktionen ordnar att stänga filer efter användning.
  • Jag märker att du ringde din fil file. Du bör undvika att använda namn som ingår i Python-språket.

Om du vill ha kod som tar bort de nya raderna är det ett alternativ:

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

Obs t hatt jag använde rstrip som tar bort vita blanksteg från endast den högra änden av en sträng.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *