LINUX.ORG.RU

Python и перевод строки

 ,


0

1

С какого бодуна питон по умолчанию считает одиночный ‘\r’ (без ‘\n’) переводом строки? Вот в какой системе это перевод строки, или какой юзкейс, при котором подобная хитрожопость стандартной библиотеки полезна?

https://docs.python.org/3/library/functions.html#open :

When reading input from the stream, if newline is None, universal newlines mode is enabled. Lines in the input can end in ‘\n’, ‘\r’, or ‘\r\n’, and these are translated into ‘\n’ before being returned to the caller.

★★★★★

вопросы к бидону, какого лешего им было в падлу возиться и они все слепили в одну кучу

anonymous
()
Ответ на: комментарий от anonymous

хм, а если заглянуть в юникодный стандарт, то жизнь начинает играть новыми красками… а вот это новость мля :))))

любое сочетание в юникоде - новая строка :)))) ну что, поздравляю, приехали

anonymous
()

Все верно говорят, этот символ из Мака лохматых времен.

gruy ★★★★★
()

if newline is None

Если тебя не устраивает поведение по умолчанию, укажи параметр newline так как тебе нужно.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

почему нужно делать лишние телодвижения из-за какой-то древней версии Мак, в которой что-то то ли было, то ли нет… Вот в ruby адекватные дефолты.

seiken ★★★★★
() автор топика

существуют или существовали системы с ‘\r’ в качестве перевода строки. это факт. а тебе именно оно чем помешало? какой там у тебя, так сказать, хитрожопый юзкейс?

anonymous
()
Ответ на: комментарий от seiken

А в чём проблема? У тебя есть файл, в котром '\r' используется не вместе с '\l' и не в качестве переноса строки? Откуда этот файл взялся? Он явно некорректен.

Я вижу телько одну возможную ситуацию в реальной жизни, когда можно получить такой файл: перенаправить стандартный вывод программы с tui в файл. Надеюсь, сам понимаешь, насколько такое действие некорректно.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от seiken

почему нужно делать лишние телодвижения

а это ты себя спроси, почему тебе нужно делать лишние телодвижения. а может быть гвидон назло тебе так сделал, м? ну конечно, у кого ещё кроме тебя мог возникнуть батхёрт по этому вопросу.

anonymous
()
Ответ на: комментарий от seiken

Вот в ruby

пиши на руби, в чём проблема?

anonymous
()
Ответ на: комментарий от anonymous

да ничего особенного, просто хотел регекспы затестить python vs. ruby, и наткнулся на неадекватное перечисление строк.

существуют или существовали системы с ‘\r’ в качестве перевода строки. это факт

из всего старья только классический макос

seiken ★★★★★
() автор топика
Ответ на: комментарий от seiken

в html перенос строки вообще не имеет значения (точнее имеет на равне с любым другим whitespace).

eternal_sorrow ★★★★★
()
Ответ на: комментарий от seiken

для парсинга хтмл в пистоне используются библиотеки beautifulsoup4 и сишные биндинги на lxml

tz4678 ★★
()

Потому что есть всего три варианта перевода строки:

  • \r
  • \r\n
  • \n

А функция у них одна. Поэтому приписать им одинаковую семантику, обработать их как одинаковые сущности, консистентно вывести – самый простой алгоритм, который, к тому же, ведет себя так, как ждет большинство пользователей. (Будь это пользователь-программист или пользователь-пользователь, он, как правило, ожидает, что любой перевод строки на одной системе останется таковым на другой).

Разные переводы строки, кстати, могут присутствовать в одном файле, если разные его части были созданы на разных системах (или сохранены с разными настройками), а потом склеены каким-нибудь cat. Можно придумать и другие гипотетические ситуации с шаловливыми серверами или не совсем пряморукими разрабами.

Bagrov ★★★★★
()
Ответ на: комментарий от eternal_sorrow

html из веба

одумайся

эта пять! сделал мой день :)

Sahas ★★★★☆
()

О! эксперты уже тут. Причем тут SO? Вы где-то видели слово «парсинг» в этой теме?

seiken ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ты уверен, что знаешь смысл термина «парсинг»?

seiken ★★★★★
() автор топика
Ответ на: комментарий от eternal_sorrow

Ну.. Когда я делал pylor(никакого api тогда у лора не было, а rss годен был лишь частично - там много не хватало) я заюзал beautifulsoup сначала. Но, её тормознутость была визуально заметна в интерфейсе. И я начал парсить регулярками. Если используется определенный subset html, как на форуме, это может быть рабочим решением и работало очень быстро.

Так что ситуации разные бывают. Или когда надо из большого html документа просто выдрать определенные характерные данные. Парсить его весь - жуткий overkill.

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

На самом деле, всё просто. Мне нужен был текст «войны и мира», и я нашёл его в html. Мало того, что все тэги для моей задачи это просто мусор, которые регулярки пропускают, этот html ещё продублирован конкатенацией самого себя (так что это даже м.б. и не валидный html). И разбиение на строки тут вообще не важно, чисто для отладки удобнее. Никакого парсинга тут, разумеется, нет и не нужно.

seiken ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ну, кстати, они не запилили совместимость с юникодом в плане того что должно трактоваться как новая строка

peregrine ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Очень всё корректно. Раскуривай стандарты любимого линуксоидами юникода, там и не с таким познакомишься.

LF:    Line Feed, U+000A
VT:    Vertical Tab, U+000B
FF:    Form Feed, U+000C
CR:    Carriage Return, U+000D
CR+LF: CR (U+000D) followed by LF (U+000A)
NEL:   Next Line, U+0085
LS:    Line Separator, U+2028
PS:    Paragraph Separator, U+2029

Это всё корректные символы переноса строк. Надо протолкнуть их все в Python4, чтобы был совместимый с юникодом

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Бох уберег. Стараюсь как можно дальше держаться от конечных пользователей, и всего, что связано с UI.

seiken ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Да? Ну пусть будет датамайнинг. Всё что связано с юникодом и кодировками мне не интересно.

seiken ★★★★★
() автор топика
Ответ на: комментарий от anonymous

любое сочетание в юникоде - новая строка :)))) ну что, поздравляю, приехали

Не всем нужен юникод!

saahriktu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.