Почему [line in open("text.txt")] приводит к переводу строки?
(примечание: я не пытаюсь ничего изменить - просто пытаюсь понять)
Рассматривая решения для чтения в файле на python, каждый раз, когда символ новой строки должен быть удален:
In [5]: [line for line in open("text.txt", "r")]
Out[5]: ['line1\n', 'line2']
В то время как интуитивное поведение (судя по популярности некоторых вопросов об этом) должно было бы просто привести к появлению разорванных строк?
В чем причина этого?
-- РЕДАКТИРОВАТЬ --
Конечно, "интуитивно" субъективно. "Последовательный", однако, не так. Видимо концепция "линия" в "line1\nline2".splitlines()
отличается от того, который обрабатывается iter(open("text.txt"))
:
>>> assert(open("text.txt").readlines() == \
... open("text.txt").read().splitlines())
AssertionError
Уверен, что люди это поймают.
Так что я ошибся: возможно, моя интуиция как раз соответствует splitlines
Интерпретация: разделение не должно включать разделители. Возможно, ответ на мой вопрос не технический, а скорее как "поскольку PEP-xyz был одобрен другими людьми, а не PEP-qrs". Может быть, я должен опубликовать это на каком-нибудь форуме по питону.
2 ответа
Ну, это линия. Строка определяется окончанием символа \n
, Если последовательность символов не заканчивается \n
(или EOF) как мы могли знать, что это была линия?
"hello world"
"hello world\n"
Первая не строка, если мы напечатаем ее дважды, мы можем получить
hello worldhello world
Пока вторая версия даст нам
hello world
hello world
Перенос ответа/решения спрашивающего с вопроса на ответ:
Согласен: «интуитивный» субъективен. «Последовательный», однако, в меньшей степени. По-видимому, понятие «линия» в
"line1\nline2".splitlines()
отличается от того, которым занимаетсяiter(open("text.txt"))
:>>> assert(open("text.txt").readlines() == \ ... open("text.txt").read().splitlines()) AssertionError
Наверняка люди попадаются на этом.
Значит, я ошибся: может быть, моя интуиция как раз совпадает с
splitlines
интерпретация: разделенный материал не должен включать разделители. Возможно, ответ на мой вопрос не технический, а скорее «поскольку PEP-xyz был одобрен другими людьми, чем PEP-qrs». Может быть, мне следует опубликовать его на каком-нибудь форуме языка Python.