Я запутываю свой ответ на основе регулярных выражений от ответа, который я разместил ранее в комментариях к другому ответу. Я думаю, что использование reболее ясного и ясного решения этой проблемы, чем str.rstrip.
>>> import re
Если вы хотите удалить один или несколько завершающих символов новой строки:
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Если вы хотите удалить символы новой строки везде (не только в конце):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Если вы хотите удалить только 1-2 новых строку символов хвостовых (т.е. \r, \n, \r\n, \n\r, \r\r, \n\n)
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n\r\n')
'\nx\r'
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n\r')
'\nx\r'
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n')
'\nx'
У меня есть ощущение, что большинство людей действительно хотят здесь, чтобы удалить только одно вхождение завершающего символа новой строки, или \r\nили \nи ничего больше.
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\n\n', count=1)
'\nx\n'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\r\n\r\n', count=1)
'\nx\r\n'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\r\n', count=1)
'\nx'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\n', count=1)
'\nx'
( ?:Создать группу без захвата.)
(Между прочим, это не то, что '...'.rstrip('\n', '').rstrip('\r', '')делает, что может быть непонятно другим, спотыкающимся в этом потоке. str.rstripУдаляет как можно больше завершающих символов, поэтому такая строка foo\n\n\nможет привести к ложному положительному fooзначению, тогда как вы, возможно, хотели сохранить другие переводы строк после удаления одного завершающего.)