Proč Python readlines () přináší extra ' \ n ' mezi řádky při čtení z textového souboru?


nejlepší odpověď

Protože je to hloupé. Nedokážu vymyslet užitečné použití této funkce a hodně jsem se snažil.

(Viz Romainova odpověď pro seriózní přístup k otázce „proč přesně“, prostě musím plamenit 🙂 Mohu však poskytnout nějaká řešení)

Proč nepřijímá ještě jeden parametr (tj. „konec“, který je výchozí na „\ n“, nebo boolový příznak keepnl = True), abych si mohl vybrat ponechat / změnit konec řádku, pokud a pouze v případě, že ho potřebuji, jde nad rámec mého chápání.

Toto neintuitivní „politické rozhodnutí“ je prakticky nepoužitelné a místo pomalého a obtížně pochopitelného:

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

Obvykle dávám přednost

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

Podle mého názoru mnohem přímější. Myslím, že je příliš pozdě to nyní změnit.

Ano, v závislosti na operačním systému existuje možnost dalších zakončení řádků.

Myslím, že i standardní libs v Pythonu mají své chyby , taky.

Odpovědět

Tyto znaky nejsou doplňky. Jsou přítomny v textovém souboru. Označují konce řádků.

Zde je další způsob čtení textového souboru s názvem sample.txt, který ilustruje.

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

  • Každý řádek v tištěné podobě výstup končí \n, protože ty byly v řádcích textového souboru.
  • Lepší by bylo použít with když otevřete soubor, protože tento konstrukt zajišťuje jeho uzavření po použití.
  • Všiml jsem si, že jste soubor nazvali file. Měli byste se vyhnout používání názvů, které jsou součástí jazyka Python.

Pokud chcete kód, který odřízne nové řádky, je zde jedna možnost:

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

Poznámka t klobouk Použil jsem rstrip který odděluje znaky mezer pouze od pravého konce řetězce.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *