Hvorfor giver Python readlines () ekstra ' \ n ' mellem linierne, når du læser fra en tekstfil?


Bedste svar

Fordi det er dumt. Jeg kan ikke tænke på en nyttig anvendelse af denne -funktion , og jeg har prøvet hårdt at gøre det.

(Se Romains svar til en seriøs tilgang til “hvorfor nøjagtigt”, jeg skal bare flamme 🙂 Jeg kan dog give nogle løsninger)

Hvorfor accepterer den ikke endnu en parameter (dvs. “slutning”, der er standard til “\ n” eller et bool-flag, keepnl = True), så jeg kan vælge at holde / ændre linjeslutning, hvis og kun hvis jeg har brug for en, går ud over min forståelse.

Dette uintuitiv “politisk beslutning” gør den praktisk talt ubrugelig og i stedet for den langsomme og vanskelige at forstå:

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

Jeg foretrækker normalt

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

Meget mere ligetil for mine øjne. Jeg antager, at det er for sent at ændre det nu.

Ja, der er mulighed for andre linieendelser, afhængigt af operativsystemet.

Jeg antager, at selv python-standard-libs har deres fejl også.

Svar

Disse tegn er ikke ekstraudstyr. De er til stede i tekstfilen. De markerer enderne af linjer.

Her er en anden måde at læse en tekstfil på, kaldet sample.txt, som illustrerer.

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

  • Hver linje i den udskrevne output slutter med \n fordi de var i linjerne i tekstfilen.
  • Det ville være bedre at bruge with når du åbner en fil, fordi denne konstruktion arrangerer at lukke filer efter brug.
  • Jeg bemærker, at du kaldte din fil file. Du bør undgå at bruge navne, der er en del af Python-sproget.

Hvis du vil have kode, der fjerner de nye linjer, er her en mulighed:

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

Bemærk t hat jeg brugte rstrip som fjerner hvide mellemrumstegn fra kun den højre ende af en streng.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *