chomp
문자열이 줄 바꿈 인 경우 문자열의 마지막 문자를 제거하는 Perl 함수 와 동등한 Python은 무엇입니까 ?
답변
방법을 시도 rstrip()
하십시오 (doc Python 2 및 Python 3 참조 )
>>> 'test string\n'.rstrip()
'test string'
Python의 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) 문자를 제거하는 정식 방법은 문자열 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'
rstrip의 매개 변수로 ‘\ r \ n’을 사용하면 ‘\ 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은 문자열을 수정하지 않기 때문에 Perl의 chomp ()와 똑같이 작동하지 않습니다. 즉, Perl에서 :
$x="a\n";
chomp $x
결과 $x
것 "a"
.
그러나 파이썬에서는 :
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
원래 문자열을 수정하는 대신 새 문자열을 반환 하므로 할당이 필요 합니다.