Miksi Python-lukulinjat () tuottavat ylimääräistä ' \ n ' rivien väliin, kun luet tekstitiedostosta?


Paras vastaus

Koska se on tyhmää. En voi ajatella tämän -ominaisuuden hyödyllistä sovellusta, ja olen yrittänyt kovasti.

(Katso Romainin vastaus Vakava lähestymistapa ”miksi tarkalleen”, minun täytyy vain sytyttää liekki 🙂 Voin kuitenkin tarjota joitain kiertotapoja)

Miksi se ei hyväksy vielä yhtä parametria (ts. ”loppu”, joka oletuksena kohtaan ”\ n” tai bool-lippu, keepnl = True), jotta voin päättää pitää / muuttaa rivin loppua, jos vain ja jos tarvitsen sitä, ylittää käsitykseni.

Tämä epäjohdonmukainen ”poliittinen päätös” tekee siitä käytännössä käyttökelvoton ja hitaan ja vaikeasti ymmärrettävän sijasta:

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

Pidän parempana

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

Paljon suoraviivaisempaa silmäni kannalta. Luulen, että on liian myöhäistä muuttaa sitä nyt.

Kyllä, on mahdollista, että muutkin rivinpäätteet riippuvat käyttöjärjestelmästä.

Luulen, että jopa python-standardin libillä on virheitä myös.

Vastaa

Nämä merkit ovat eivät extrat. Ne ovat läsnä tekstitiedostossa. Ne merkitsevät rivien päät.

Tässä on toinen tapa lukea tekstitiedosto, nimeltään sample.txt, joka havainnollistaa.

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

  • Jokainen rivi tulostetussa tuloste päättyy \n, koska ne olivat tekstitiedoston riveillä.
  • Sinun olisi parempi käyttää with kun avaat tiedoston, koska tämä rakenne järjestää tiedostojen sulkemisen käytön jälkeen.
  • Huomasin, että soitit tiedostollesi file. Vältä nimien käyttöä, jotka ovat osa Python-kieltä.

Jos haluat koodin, joka poistaa uudet rivit, tässä on yksi vaihtoehto:

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

Huomautus t hattua käytin rstrip, joka poistaa välilyönnit vain merkkijonon oikeasta päästä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *