Я перекидаю свою відповідь на основі регулярного виразу з однієї, яку я опублікував раніше в коментарях іншої відповіді. Я вважаю, що використання 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тоді як ви, можливо, захотіли зберегти інші нові рядки після зняття одного останнього.)