Miért jelentenek a Python readlines () extra ' \ n ' a sorok között, ha szöveges fájlból olvas?


Legjobb válasz

Mert hülyeség. Nem jut eszembe ennek a funkciónak hasznos alkalmazása, és nagyon igyekeztem.

(Lásd Romain válaszát komoly megközelítés a „miért pont” -ról, csak lángolnom kell 🙂 Néhány megoldást mégis meg tudok adni)

Miért nem fogad el még egy paramétert (azaz „véget”, amely alapértelmezés szerint a „\ n” jelzéshez, vagy egy bool zászlóhoz, keepnl = True), hogy kiválaszthassam a sorvégződések megtartását / módosítását, ha és csak akkor, ha szükségem van rá, meghaladja a megértésemet.

Ez az értelmetlen „politikai döntés” gyakorlatilag használhatatlanná teszi, és a lassú és nehezen érthető helyett:

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

Általában

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

Sokkal egyértelműbb a szemem számára. Azt hiszem, késő megváltoztatni.

Igen, az operációs rendszertől függően más sorvégződésekre is lehetőség van.

Gondolom, még a python szabványos lib-eknek is vannak hibái is.

Válasz

Ezek a karakterek nem extrák. Jelen vannak a szövegfájlban. Megjelölik a sorok végét.

Íme egy másik módszer a szöveges fájl elolvasására, amelynek neve: sample.txt. Ez illusztrálja.

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

  • A nyomtatott fájl minden sora a kimenet \n -vel végződik, mert ezek a szövegfájl soraiban voltak.
  • Jobb lenne, ha a következőt használná: with amikor megnyit egy fájlt, mert ez a konstrukció használat után bezárja a fájlokat.
  • Úgy veszem észre, hogy a fájlját file hívta. Kerülje a Python nyelv részét képező nevek használatát.

Ha olyan kódot szeretne, amely levonja az új sorokat, íme egy lehetőség:

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

Megjegyzés t kalapot használtam rstrip, amely a szóköz karaktereit csak egy karakterlánc jobb széléről szünteti meg.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük