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.