Hvorfor gir Python readlines () ekstra ' \ n ' mellom linjene når du leser fra en tekstfil?


Beste svaret

Fordi det er dumt. Jeg kan ikke tenke meg en nyttig anvendelse av denne -funksjonen , og jeg har prøvd hardt å gjøre det.

(Se Romains svar for en seriøs tilnærming til «hvorfor akkurat», jeg trenger bare å flamme 🙂 Jeg kan gi noen løsninger, skjønt)

Hvorfor godtar den ikke en parameter til (dvs. «slutt», som standard til “\ n”, eller et bool-flagg, keepnl = True), slik at jeg kan velge å beholde / endre linjeslutning, hvis, og bare hvis jeg trenger en, går utover min forståelse.

Dette uintuitiv «policy-avgjørelse» gjør den praktisk talt ubrukelig og i stedet for langsom og vanskelig å forstå:

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

Jeg foretrekker vanligvis

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

Mye enklere for mine øyne. Jeg antar at det er for sent å endre det nå.

Ja, det er mulighet for andre linjeendelser, avhengig av operativsystemet.

Jeg antar at selv python-standard-libs har sine feil også.

Svar

Disse tegnene er ikke statister. De er tilstede i tekstfilen. De markerer endene på linjene.

Her er en annen måte å lese en tekstfil på, kalt 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 trykte utgangen slutter med \n fordi de var i linjene i tekstfilen.
  • Det er bedre å bruke with når du åpner en fil fordi denne konstruksjonen ordner med å lukke filer etter bruk.
  • Jeg merker at du ringte filen din file. Du bør unngå å bruke navn som er en del av Python-språket.

Hvis du vil ha kode som fjerner de nye linjene, er 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

Merk t hatt jeg brukte rstrip som fjerner hvite mellomromstegn fra bare høyre ende av en streng.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *