Вопрос-Ответ

How can I remove a trailing newline?

Как я могу удалить завершающий перевод строки?

Как я могу удалить последний символ строки, если это символ новой строки?

"abc\n"  -->  "abc"
Переведено автоматически
Ответ 1

Попробуйте метод rstrip() (см. Документы Python 2 и Python 3)

>>> 'test string\n'.rstrip()
'test string'

rstrip() Метод Python по умолчанию удаляет все виды завершающих пробелов, а не только одну новую строку, как это делает Perl с chomp.

>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'

Удалить только новые строки:

>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '

В дополнение к rstrip(), существуют также методы strip() и lstrip(). Вот пример с тремя из них:

>>> s = "   \n\r\n  \n  abc   def \n\r\n  \n  "
>>> s.strip()
'abc def'
>>> s.lstrip()
'abc def \n\r\n \n '
>>> s.rstrip()
' \n\r\n \n abc def'
Ответ 2

И я бы сказал, что "питонический" способ получения строк без завершающих символов новой строки - это splitlines() .

>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']
Ответ 3

Канонический способ удаления символов конца строки (EOL) заключается в использовании метода string rstrip(), удаляющего все завершающие символы \r или \n . Вот примеры символов EOL для Mac, Windows и Unix.

>>> 'Mac EOL\r'.rstrip('\r\n')
'Mac EOL'
>>> 'Windows EOL\r\n'.rstrip('\r\n')
'Windows EOL'
>>> 'Unix EOL\n'.rstrip('\r\n')
'Unix EOL'

Использование '\ r \n' в качестве параметра rstrip означает, что он удалит любую завершающую комбинацию '\ r' или '\n'. Вот почему это работает во всех трех приведенных выше случаях.

Этот нюанс имеет значение в редких случаях. Например, однажды мне пришлось обрабатывать текстовый файл, который содержал сообщение HL7. Стандарт HL7 требует, чтобы завершающий символ '\ r' был символом EOL. Компьютер с Windows, на котором я использовал это сообщение, добавил свой собственный символ EOL '\ r \n'. Следовательно, конец каждой строки выглядел как '\ r \ r \n'. Использование rstrip ('\ r \n') привело бы к удалению всего '\ r \ r \n', чего я не хотел. В этом случае я просто вырезал последние два символа.

Обратите внимание, что в отличие от функции Perl chomp, эта функция удалит все указанные символы в конце строки, а не только один:

>>> "Hello\n\n\n".rstrip("\n")
"Hello"
Ответ 4

Обратите внимание, что rstrip действует не совсем так, как chomp() в Perl, потому что он не изменяет строку. То есть в Perl:

$x="a\n";

chomp $x

в результате получается $x быть "a".

но в Python:

x="a\n"

x.rstrip()

будет означать, что значение x остается неизменным "a\n". Even x=x.rstrip() не всегда дает одинаковый результат, поскольку удаляет все пробелы с конца строки, а не максимум одну новую строку.

2023-09-09 17:30 python