Что такое эквивалент Python для Perl? chomp
функция, которая удаляет последний символ строки, если это символ новой строки?
Что такое эквивалент Python для Perl? chomp
функция, которая удаляет последний символ строки, если это символ новой строки?
Попробуйте метод 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'
И я бы сказал, что «pythonic» способ получить строки без конечных символов новой строки - splitlines ().
>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']
Канонический способ обрезать символы конца строки (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"
Обратите внимание, что rstrip не действует точно так же, как chomp () Perl, потому что он не изменяет строку. То есть, в Perl:
$x="a\n";
chomp $x
приводит к $x
являющийся "a"
,
но в Python:
x="a\n"
x.rstrip()
будет означать, что значение x
является все еще "a\n"
, Даже x=x.rstrip()
не всегда дает тот же результат, так как он удаляет все пробелы с конца строки, а не только одну новую строку.
Я могу использовать что-то вроде этого:
import os
s = s.rstrip(os.linesep)
Я думаю, что проблема с rstrip("\n")
что вы, вероятно, захотите убедиться, что разделитель строк переносится. (по слухам, некоторые устаревшие системы используют "\r\n"
). Другой способ заключается в том, что rstrip
будет удалять повторяющиеся пробелы. С надеждой os.linesep
будут содержать правильные символы. это работает для меня.
Вы можете использовать line = line.rstrip('\n')
, Это приведет к удалению всех строк новой строки с конца строки, а не только одной.
s = s.rstrip()
удалит все строки новой строки в конце строки s
, Назначение необходимо, потому что rstrip
возвращает новую строку вместо изменения исходной строки.
"line 1\nline 2\r\n...".replace('\n', '').replace('\r', '')
>>> 'line 1line 2...'
or you could always get geekier with regexps :)
have fun!
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.
you can use strip:
line = line.strip()
demo:
>>> "\n\n hello world \n\n".strip()
'hello world'