후행 줄바꿈을 삭제하려면 어떻게 해야 합니까?
문자열의 마지막 문자가 줄바꿈일 경우 어떻게 삭제합니까?
"abc\n" --> "abc"
을 시험해 보다rstrip()
(문서 Python 2 및 Python 3 참조)
>>> 'test string\n'.rstrip()
'test string'
이 python python rstrip()
method는 기본적으로 Perl이 에서 하는 것처럼 하나의 줄만 새로운 것이 아니라 모든 종류의 후행 공백을 삭제합니다.
>>> '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'
줄 바꿈 없이 줄을 얻는 "피토닉" 방법은 분할선()이라고 할 수 있습니다.
>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']
End-of-Line(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'
strip의 파라미터로서 「\r\n」을 사용하는 것은, 「\r」또는 「\n」의 후행의 편성을 모두 삭제하는 것을 의미합니다.그래서 위의 세 가지 경우 모두 효과가 있습니다.
이 뉘앙스는 드문 경우에서 문제가 됩니다.예를 들어 HL7 메시지가 포함된 텍스트 파일을 처리해야 했던 적이 있습니다.HL7 표준에서는 EOL 문자로 후행 '\r'이 필요합니다.이 메시지를 사용하고 있던 Windows 머신에 독자적인 "\r\n" EOL 문자가 추가되어 있습니다.따라서 각 행의 끝은 '\r\r\n'처럼 보였습니다.rstrip('\r\n')을 사용하면 전체 '\r\r\n'이 삭제될 수 있습니다.이것은 제가 원하는 것이 아닙니다.그 경우에는 마지막 두 글자를 잘라버렸습니다.
Perl과는 chomp
function. 함수: function: 열열끝끝끝끝끝끝끝 function function function function function function function function function function function function function function function function function function function function function function 。
>>> "Hello\n\n\n".rstrip("\n")
"Hello"
rstrip은 문자열을 수정하지 않기 때문에 Perl의 chomp()와 동일하게 동작하지 않습니다.즉, Perl의 경우:
$x="a\n";
chomp $x
이 되다$x
존존 "a"
.
하지만 Python에서는:
x="a\n"
x.rstrip()
말은 '값'이 '값'이라는입니다.x
정지해 있다 "a\n"
.★★★★★★★★★★★★★★★★★★.x=x.rstrip()
는 문자열의 끝에서 공백이 모두 제거되기 때문에 항상 같은 결과를 얻을 수 있는 것은 아닙니다.단, 최대 1개의 줄만이 아닙니다.
다음과 같은 것을 사용할 수 있습니다.
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...'
아니면 항상 regexps로 더 괴짜가 될 수도 있고
이렇게 하면 "\n" 행 터미네이터에 대해 정확하게 perl의 chomp(어레이에서의 동작 제외)가 복제됩니다.
def chomp(x):
if x.endswith("\r\n"): return x[:-2]
if x.endswith("\n") or x.endswith("\r"): return x[:-1]
return x
(주의: 문자열 'in place'는 수정되지 않으며, 여분의 후행 공백을 제거하지 않으며, \r\n을 고려합니다.)
스트립을 사용할 수 있습니다.
line = line.strip()
데모:
>>> "\n\n hello world \n\n".strip()
'hello world'
rstrip은 Chomp와 같은 기능을 하지 않습니다.http://perldoc.perl.org/functions/chomp.html을 읽고 chomp가 매우 복잡하다는 것을 확인하세요.
단, chomp는 최대 1줄의 엔딩을 삭제하지만 rstrip은 가능한 한 많은 엔딩을 삭제한다는 것이 포인트입니다.
여기서 모든 줄 바꿈을 삭제하는 스트립을 볼 수 있습니다.
>>> 'foo\n\n'.rstrip(os.linesep)
'foo'
re.sub를 사용하면 다음과 같이 일반적인 Perl chomp 사용률의 근사치를 얻을 수 있습니다.
>>> re.sub(os.linesep + r'\Z','','foo\n\n')
'foo\n'
"foo".rstrip(os.linesep)
: Python이 실행되고 있는 플랫폼의 줄바꿈 문자만 압축됩니다.예를 들어 다음과 같이 Linux에서 Windows 파일의 행을 침팬지 처리한다고 가정해 보십시오.
$ 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'
>>>
"foo".rstrip("\r\n")
대, 、 이마 、 위에가럼럼럼럼 。
Python 설명서의 예는 다음과 같습니다.line.strip()
.
Perl †chomp
함수는 문자열이 실제로 존재하는 경우에만 문자열 끝에서 줄 바꿈시퀀스를 1개 삭제합니다.
Python의 경우, Python에서는 할 입니다.process
개념적으로 이 파일의 각 행에 도움이 되는 것을 하기 위해 필요한 기능은 다음과 같습니다.
import os
sep_pos = -len(os.linesep)
with open("file.txt") as f:
for line in f:
if line[sep_pos:] == os.linesep:
line = line[:sep_pos]
process(line)
Python 2.2 이후를 위한 S.rstrip("\r\n")을 옹호하는 FAQ를 python.org에서 발견했습니다.
import re
r_unwanted = re.compile("[\n\t\r]")
r_unwanted.sub("", your_text)
여러 줄의 스트링 오브젝트(oldstr) 내의 모든 줄 바꿈을 정리하는 경우 딜리미터 '\n'에 따라 목록으로 분할한 후 이 목록을 새 스트링(newstr)으로 결합할 수 있습니다.
newstr = "".join(oldstr.split('\n'))
파일 객체에서 분리되지 않은 행을 가져올 수 있는 방법과 병렬로 반복기에서 분리한 행을 가져올 수 있으면 편리합니다.다음의 코드로 실행할 수 있습니다.
def chomped_lines(it):
return map(operator.methodcaller('rstrip', '\r\n'), it)
사용 예:
with open("file.txt") as infile:
for line in chomped_lines(infile):
process(line)
아까 댓글에 올린 답변에서 정규표현을 하고 있습니다.는 용하는 i i i를 사용하는 것 요.re
는 이 에 대한 보다 입니다.str.rstrip
.
>>> import re
후행 줄바꿈 문자를 하나 이상 삭제하는 경우:
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
후행뿐만 아니라 모든 줄 바꿈 문자를 제거하는 경우:
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
의 줄바꿈 , 「」」)만을는, 「」( 「」)는 다음과 같습니다.\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'
나는 대부분의 사람들이 여기서 정말로 원하는 것이, 후행하는 줄바꿈 캐릭터의 단 하나의 발생을 제거하는 것이라고 느낀다.\r\n
★★★★★★★★★★★★★★★★★」\n
그 이상도 이하도 아니다.
>>> 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'
(the)?:
group 、 non-timegroup )을 작성하는 입니다.
(그런데 이건 아니야)'...'.rstrip('\n', '').rstrip('\r', '')
다른 사람들이 이 실타래에 걸려 넘어지는 것은 분명하지 않을 것이다. str.rstrip
한 한 에, 「」와 같은 됩니다.foo\n\n\n
foo
, 새로운 은, 1개의 이 있습니다
특수한 경우의 회피책:
줄바꿈 문자가 마지막 문자인 경우(대부분의 파일 입력과 마찬가지로), 컬렉션의 모든 요소에 대해 다음과 같이 인덱스를 작성할 수 있습니다.
foobar= foobar[:-1]
새로운 라인 캐릭터를 잘라냅니다.
Perl의 Chomp에는 완벽한 아날로그가 없는 것 같습니다.특히 rstrip은 다음과 같은 다중 문자 줄 바꿈 기호를 처리할 수 없습니다.\r\n
단, 스플릿라인은 여기서 지적한 바와 같이 동작합니다.다른 질문에 대한 내 답변에 따라 조인 및 분할선을 결합하여 문자열에서 모든 새 줄을 제거/바꿀 수 있습니다.s
:
''.join(s.splitlines())
다음은 (chomp와 마찬가지로) 정확히 하나의 후행 뉴라인을 삭제합니다.패스True
처 keepends
분할선을 지정하는 인수에는 딜리미터가 유지됩니다.다음 에 합니다.
def chomp(s):
if len(s):
lines = s.splitlines(True)
last = lines.pop()
return ''.join(lines + last.splitlines())
else:
return ''
s = '''Hello World \t\n\r\tHi There'''
# import the module string
import string
# use the method translate to convert
s.translate({ord(c): None for c in string.whitespace}
>>'HelloWorldHiThere'
정규식 포함
s = ''' Hello World
\t\n\r\tHi '''
print(re.sub(r"\s+", "", s), sep='') # \s matches all white spaces
>HelloWorldHi
치환 \n,\t,\r
s.replace('\n', '').replace('\t','').replace('\r','')
>' Hello World Hi '
정규식 포함
s = '''Hello World \t\n\r\tHi There'''
regex = re.compile(r'[\n\r\t]')
regex.sub("", s)
>'Hello World Hi There'
가입과 함께
s = '''Hello World \t\n\r\tHi There'''
' '.join(s.split())
>'Hello World Hi There'
>>> ' spacious '.rstrip()
' spacious'
>>> "AABAA".rstrip("A")
'AAB'
>>> "ABBA".rstrip("AB") # both AB and BA are stripped
''
>>> "ABCABBA".rstrip("AB")
'ABC'
사용방법:
line = line.rstrip("\n")
또는
line = line.strip("\n")
이런 복잡한 건 필요 없어
의 끝에는 세 . 즉, 행의 끝에는 세 가지가 있습니다.\n
,\r
★★★★★★★★★★★★★★★★★」\r\n
에서의 비교적 단순한 정규 표현입니다.r"\r?\n?$"
을 사용하다
(그리고 우리는 그들을 모두 잡아야 해, 맞지?)
import re
re.sub(r"\r?\n?$", "", the_text, 1)
마지막 인수에서는 치환된 발생 횟수를 1개로 제한하고 어느 정도 chomp를 모방합니다.예:
import re
text_1 = "hellothere\n\n\n"
text_2 = "hellothere\n\n\r"
text_3 = "hellothere\n\n\r\n"
a = re.sub(r"\r?\n?$", "", text_1, 1)
b = re.sub(r"\r?\n?$", "", text_2, 1)
c = re.sub(r"\r?\n?$", "", text_3, 1)
서...어디에a == b == c
True
.
속도(예를 들어 문자열 리스트가 많은 경우)에 관심이 있고 줄 바꿈 문자 특성을 알고 있다면 스트립보다 스트링 슬라이스가 실제로 더 빠릅니다.이를 설명하기 위한 간단한 테스트:
import time
loops = 50000000
def method1(loops=loops):
test_string = 'num\n'
t0 = time.time()
for num in xrange(loops):
out_sting = test_string[:-1]
t1 = time.time()
print('Method 1: ' + str(t1 - t0))
def method2(loops=loops):
test_string = 'num\n'
t0 = time.time()
for num in xrange(loops):
out_sting = test_string.rstrip()
t1 = time.time()
print('Method 2: ' + str(t1 - t0))
method1()
method2()
출력:
Method 1: 3.92700004578
Method 2: 6.73000001907
Windows 와 Linux 의 양쪽 모두에서 동작합니다(re 솔루션만을 필요로 하는 경우 re sub 를 사용하면 조금 비쌉니다).
import re
if re.search("(\\r|)\\n$", line):
line = re.sub("(\\r|)\\n$", "", line)
캐치 올:
line = line.rstrip('\r|\n')
언급URL : https://stackoverflow.com/questions/275018/how-do-i-remove-a-trailing-newline
'programing' 카테고리의 다른 글
PHP: $_SESS 내에 '개체' 저장이온 (0) | 2023.01.03 |
---|---|
phpMyAdmin의 MySQL 로그는 어디서 찾을 수 있습니까? (0) | 2023.01.03 |
JavaScript에서 배열의 최소/최대 요소를 찾습니다. (0) | 2023.01.03 |
개별 행의 MYSQL sum() (0) | 2023.01.03 |
테이블의 일부 특정 항목에서 다른 테이블의 열 값을 사용하여 열을 업데이트합니다. (0) | 2023.01.03 |