De ce Python readlines () produce un plus de ' \ n ' între rânduri când citiți dintr-un fișier text?


Cel mai bun răspuns

Pentru că este o prostie. Nu mă pot gândi la o aplicație utilă a acestei „ caracteristică și am încercat din greu.

(Vezi răspunsul lui Romain pentru o abordare serioasă cu privire la „de ce anume”, trebuie doar să aprind 🙂 Totuși, vă pot oferi unele soluții)

De ce nu acceptă încă un parametru (adică „sfârșitul”, care implicit la „\ n”, sau un steag bool, keepnl = True), astfel încât să pot alege să păstrez / modific finalul de linie, dacă și numai dacă am nevoie de unul, depășește înțelegerea mea.

„decizia de politică” neintuitivă o face practic inutilizabilă și, în loc de cea lentă și dificil de înțeles:

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

De obicei prefer

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

Mult mai direct pentru ochii mei. Bănuiesc că este prea târziu pentru a-l schimba acum.

Da, există posibilitatea altor terminații de linie, în funcție de sistemul de operare.

Bănuiesc că și libs-urile standard Python au defectele lor. , de asemenea.

Răspuns

Aceste caractere sunt nu extras. Acestea sunt prezente în fișierul text. Marcează capetele liniilor.

Iată un alt mod de a citi un fișier text, numit sample.txt, care ilustrează.

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

  • Fiecare linie din tipărit ieșirea se termină cu \n deoarece acestea erau în rândurile din fișierul text.
  • Ar fi mai bine să folosiți with când deschideți un fișier deoarece acest construct aranjează închiderea fișierelor după utilizare.
  • Observ că ați chemat fișierul dvs. file. Ar trebui să evitați să folosiți nume care fac parte din limbajul Python.

Dacă doriți cod care elimină liniile noi, iată o opțiune:

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

Notă t pălărie am folosit rstrip care elimină caracterele de spațiu alb doar de la capătul drept al unui șir.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *