Вопрос: Как удалить (chomp) завершающую новую строку в Python?


Что такое эквивалент Python для Perl? chompфункция, которая удаляет последний символ строки, если это символ новой строки?


1309


источник


Ответы:


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

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

Питона rstrip()метод полос все типы конечных пробелов по умолчанию, а не только одна новая строка, как 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 '

Существуют также методы lstrip()а также strip():

>>> 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'

1356



И я бы сказал, что «pythonic» способ получить строки без конечных символов новой строки - splitlines ().

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

137



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

>>> '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 требует, чтобы в качестве символа EOL использовался конечный «\ r». Машина Windows, на которой я использовала это сообщение, добавила свой собственный символ «\ r \ n» EOL. Поэтому конец каждой строки выглядел как «\ r \ r \ n». Использование rstrip ('\ r \ n') удалило бы все «\ r \ r \ n», чего я не хотел. В этом случае я просто нарезал последние два символа.

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

>>> "Hello\n\n\n".rstrip("\n")
"Hello"

122



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

$x="a\n";

chomp $x

приводит к $xявляющийся "a",

но в Python:

x="a\n"

x.rstrip()

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


95



Я могу использовать что-то вроде этого:

import os
s = s.rstrip(os.linesep)

Я думаю, что проблема с rstrip("\n")что вы, вероятно, захотите убедиться, что разделитель строк переносится. (по слухам, некоторые устаревшие системы используют "\r\n"). Другой способ заключается в том, что rstripбудет удалять повторяющиеся пробелы. С надеждой os.linesepбудут содержать правильные символы. это работает для меня.


45



Вы можете использовать line = line.rstrip('\n'), Это приведет к удалению всех строк новой строки с конца строки, а не только одной.


36



s = s.rstrip()

удалит все строки новой строки в конце строки s, Назначение необходимо, потому что rstripвозвращает новую строку вместо изменения исходной строки.


27



"line 1\nline 2\r\n...".replace('\n', '').replace('\r', '')
>>> 'line 1line 2...'

or you could always get geekier with regexps :)

have fun!


22



Careful with "foo".rstrip(os.linesep): That will only chomp the newline characters for the platform where your Python is being executed. Imagine you're chimping the lines of a Windows file under Linux, for instance:

$ python
Python 2.7.1 (r271:86832, Mar 18 2011, 09:09:48) 
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, sys
>>> sys.platform
'linux2'
>>> "foo\r\n".rstrip(os.linesep)
'foo\r'
>>>

Use "foo".rstrip("\r\n") instead, as Mike says above.


18



you can use strip:

line = line.strip()

demo:

>>> "\n\n hello world \n\n".strip()
'hello world'

18