Waarom leveren Python readlines () extra ' \ n ' tussen de regels bij het lezen uit een tekstbestand?


Beste antwoord

Omdat het stom is. Ik kan geen bruikbare toepassing bedenken van deze feature en ik heb mijn best gedaan.

(Zie het antwoord van Romain voor een serieuze benadering van “waarom precies”, ik moet gewoon vlammen 🙂 Ik kan echter een aantal tijdelijke oplossingen bieden)

Waarom accepteert het niet nog een parameter (dwz “einde”, die standaard naar “\ n”, of een bool-vlag, keepnl = True), zodat ik kan kiezen om het einde van de regel te behouden / wijzigen, als, en alleen als ik er een nodig heb, mijn begrip te boven gaat.

Dit niet-intuïtieve “beleidsbeslissing” maakt het praktisch onbruikbaar en, in plaats van traag en moeilijk te begrijpen:

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

Ik geef meestal de voorkeur aan

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

Veel eenvoudiger voor mijn ogen. Ik denk dat het nu te laat is om het te wijzigen.

Ja, er is een mogelijkheid van andere regeluitgangen, afhankelijk van het besturingssysteem.

Ik denk dat zelfs standaard Python-libs hun gebreken hebben ook.

Antwoord

Die tekens zijn niet extras. Ze zijn aanwezig in het tekstbestand. Ze markeren de uiteinden van regels.

Hier is een andere manier om een ​​tekstbestand te lezen, genaamd sample.txt, die illustreert.

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

  • Elke regel in de afgedrukte uitvoer eindigt met \n omdat die in de regels in het tekstbestand stonden.
  • Je zou beter af zijn met with wanneer je een bestand opent omdat deze constructie ervoor zorgt dat bestanden na gebruik worden gesloten.
  • Ik merk dat je je bestand file noemde. Vermijd het gebruik van namen die deel uitmaken van de Python-taal.

Als je code wilt die de nieuwe regels verwijdert, is hier een optie:

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

Opmerking t hat die ik gebruikte rstrip die witruimtetekens alleen van het rechteruiteinde van een string verwijdert.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *