Najlepsza odpowiedź
Ponieważ jest głupi. Nie mogę wymyślić użytecznego zastosowania tej „ funkcji ” i bardzo się starałem.
(Zobacz odpowiedź Romaina na poważne podejście do „dlaczego dokładnie”, po prostu potrzebuję płomienia 🙂 Mogę jednak zapewnić pewne obejścia)
Dlaczego nie akceptuje jeszcze jednego parametru (tj. „kończący”, który jest domyślny na „\ n” lub flagę bool, keepnl = True), tak żebym mógł zachować / zmienić zakończenie linii, jeśli i tylko wtedy, gdy go potrzebuję, wykracza poza moje zrozumienie.
To nieintuicyjna „decyzja dotycząca zasad” sprawia, że jest ona praktycznie bezużyteczna i zamiast powolnej i trudnej do zrozumienia:
lines = [ ln[:-1] for ln in f.readlines() ]
Zwykle wolę
lines = f.read().split("\n")
O wiele prostsze dla moich oczu. Myślę, że jest już za późno, aby to zmienić.
Tak, istnieje możliwość innych zakończeń linii, w zależności od systemu operacyjnego.
Myślę, że nawet standardowe biblioteki Pythona mają swoje wady też.
Odpowiedź
Te znaki to nie dodatki. Są obecne w pliku tekstowym. Oznaczają końce wierszy.
Oto inny sposób czytania pliku tekstowego, o nazwie sample.txt
, który 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żdy wiersz w drukowanym wynik kończy się na
\n
, ponieważ były one w wierszach pliku tekstowego. - Lepiej byłoby, gdybyś użył
with
kiedy otwierasz plik, ponieważ ta konstrukcja organizuje zamykanie plików po użyciu. - Zauważyłem, że nazwa Twojego pliku to
file
. Powinieneś unikać używania nazw, które są częścią języka Python.
Jeśli chcesz, aby kod obcinał nowe linie, oto jedna opcja:
>>> 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
Uwaga t hat Użyłem rstrip
, który usuwa białe znaki tylko z prawego końca ciągu.