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.