Dlaczego readlines () w Pythonie daje dodatkowe ' \ n ' między wierszami podczas czytania z pliku tekstowego?


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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *