Estou borbulhando minha resposta com base em expressões regulares de uma que eu postei anteriormente nos comentários de outra resposta. Eu acho que usar reé uma solução mais clara e explícita para esse problema do que str.rstrip.
>>> import re
Se você deseja remover um ou mais caracteres de nova linha à direita :
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Se você deseja remover os caracteres de nova linha em qualquer lugar (não apenas à direita):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Se você quiser remover apenas 1-2 caracteres final de linha (ou seja, \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'
Sinto que o que a maioria das pessoas realmente deseja aqui é remover apenas uma ocorrência de um caractere de nova linha à direita, um \r\nou \nmais nada.
>>> 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'
(O ?:objetivo é criar um grupo que não seja de captura.)
(A propósito, isso não é o que '...'.rstrip('\n', '').rstrip('\r', '')faz, o que pode não estar claro para os outros que se deparam com esse encadeamento. str.rstripRetira o máximo possível de caracteres finais; portanto, um encadeamento semelhante foo\n\n\nresultaria em um falso positivo, fooenquanto você pode querer preservar o outras linhas novas após remover uma única linha à direita.)