Perché Python readlines () restituisce ' \ n ' tra le righe durante la lettura da un file di testo?


Migliore risposta

Perché è stupido. Non riesco a pensare a unapplicazione utile di questa “ funzione ” e ho provato a farlo.

(Vedi la risposta di Romain per un approccio serio sul “perché esattamente”, ho solo bisogno di fiammeggiare 🙂 Posso fornire alcune soluzioni alternative, però)

Perché non accetta un parametro in più (cioè, “finale”, che è predefinito a “\ n”, o un flag bool, keepnl = True), in modo che io possa scegliere di mantenere / modificare la fine della riga, se e solo se ne ho bisogno, va oltre la mia comprensione.

Questo la “decisione politica” non intuitiva lo rende praticamente inutilizzabile e, invece del lento e difficile da comprendere:

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

Di solito preferisco

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

Molto più semplice ai miei occhi. Immagino sia troppo tardi per cambiarlo ora.

Sì, cè la possibilità di altre terminazioni di riga, a seconda del sistema operativo.

Immagino che anche le librerie standard di Python abbiano i loro difetti anche.

Risposta

Questi caratteri sono non extra. Sono presenti nel file di testo. Segnano la fine delle righe.

Ecco un altro modo di leggere un file di testo, chiamato sample.txt, che illustra.

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

  • Ogni riga nella stampa loutput termina con \n perché quelle erano nelle righe del file di testo.
  • Faresti meglio a usare with quando apri un file perché questo costrutto organizza la chiusura dei file dopo luso.
  • Ho notato che hai chiamato il tuo file file. Dovresti evitare di usare nomi che fanno parte del linguaggio Python.

Se vuoi che il codice rimuova le nuove righe, ecco unopzione:

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

Nota t cappello ho usato rstrip che rimuove i caratteri di spazio bianco solo dallestremità destra di una stringa.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *