후행 줄 바꿈을 제거하려면 어떻게해야합니까?


1688

chomp문자열이 줄 바꿈 인 경우 문자열의 마지막 문자를 제거하는 Perl 함수 와 동등한 Python은 무엇입니까 ?



3
A + 답변은 플랫폼에 open()적합한 'newline = ...' 매개 변수 가 있는 파일 을 잊어 버린 경우 (일반적인 개행 지원), 명시 적으로 제거하지 않아도됩니다.
— smci

답변:


1868

방법을 시도 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'

22
나는 파이썬 사람이 아니기 때문에 이에 대한 대답이 없지만 Perl의 chomp ()는 실제로 입력 레코드 구분 기호를 끝에서 제거합니다. 이것은 Unixy에 대한 개행이지만 Windows와 같이 다를 수 있으며 변경 가능합니다. 문자열 끝에서 해당 값을 한 번만 제거하는 방법이 있습니까?
— brian d foy

5
brian d foy : Python에는 awk 및 Perl과 같은 입력 레코드 구분 기호가 없습니다.
— Peter Hosey

7
@csde_rats, 그건 사실이 아닙니다 : OS X는 \nUnix처럼 개행을 사용 합니다. (OS X 이전에는 MacOS가 \r줄 구분 기호로 사용되었지만 10 년 전에 끝났습니다.)
— skue

21
@briandfoy Python은 Universal 개행을 기본적으로 지원합니다 (작성할 때가 아니라 읽을 때만). "U"또는 "rU"모드로 파일을 연 다음 Windows, Linux, Mac에 관계없이 텍스트가 파이썬 코드에 도달 할 때마다 줄 바꿈 스타일이 "\ n"으로 바뀝니다. 참조 : python.org/dev/peps/pep-0278
— AlcubierreDrive

12
나는 멍청한 사람이기 때문에 계속해서 철자를 쓸 것입니다. 왜 그것이 작동하지 않는지 궁금해했습니다. .strip()문자열을 변경하지 않습니다 (불변 문자열과 관련이있을 수 있음). 커맨드 라인에 없다면, 당신은 원할 것입니다"string = string.strip()"
— Script Kitty


146

줄 끝 (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"

7
최신 Mac OS X 앱은 \ n을 사용합니다. 원래 Mac OS 용으로 작성된 오래된 Carbon 앱만 \ r을 사용합니다.
— Peter Hosey

2
설명해 주셔서 감사합니다. 물론 rstrip ( '\ r \ n')도 여전히 작동합니다.
— Mike

13
os.linesep현재 OS에 대한 EOL 시퀀스를 포함하는 도 있습니다.
— Eli Collins

이것이 가장 좋은 대답입니다. 줄 바꿈 만 제거하고 가장 일반적인 플랫폼에 적합합니다.
— kevinarpe

+1 사용 \n및\r
— fechnert 2016 년

99

rstrip은 문자열을 수정하지 않기 때문에 Perl의 chomp ()와 똑같이 작동하지 않습니다. 즉, Perl에서 :

$x="a\n";

chomp $x

결과 $x것 "a".

그러나 파이썬에서는 :

x="a\n"

x.rstrip()

의 값 x이 여전히 임을 의미합니다 "a\n". 심지어 x=x.rstrip()줄 바꿈이 아니라 문자열 끝에서 모든 공백을 제거하기 때문에 항상 동일한 결과를 제공하지는 않습니다.


7
또한 strip ()은 반복되는 문자를 제거하지만 chop / chomp는 한 줄 바꿈 만 제거합니다
— kostmo

50

나는 이런 식으로 사용할 수 있습니다 :

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

문제 rstrip("\n")는 아마도 라인 분리기가 이식 가능한지 확인하고 싶을 것입니다. (일부 구식 시스템은 사용한다는 소문이 있습니다 "\r\n"). 다른 단점은 rstrip반복되는 공백을 제거 한다는 것입니다. 바라건대 os.linesep올바른 문자가 포함 되기를 바랍니다 . 위의 내용은 저에게 효과적입니다.


12
그러나 웹 응용 프로그램에서 사용자가 제출 한 콘텐츠를 정리하려는 경우에는 작동하지 않습니다. 사용자 컨텐츠는 모든 소스에서 올 수 있으며 개행 문자를 포함 할 수 있습니다.
— apiguy

2
현대 OS에서 (구식이없는 시스템의) '외국'파일을 처리 할 수 ​​있다는 점을 제외하고는 좋은 지적입니다.
— ChuckCottrill

1
텍스트 모드에서 파일을 읽는 경우 후행 문자가 항상 '\ n'으로 변환되므로 Windows 시스템에서도 작동하지 않습니다.
— Mad Physicist

@MadPhysicist 당신은 그것을 변환하는 것이 옳지 만, 그것이 논쟁에있는 모든 문자 rstrip('\r\n')와 동일 하고 rstrip()스트립 하기 때문에 여전히 작동합니다 .
— dtauxe

41

을 사용할 수 있습니다 line = line.rstrip('\n'). 이것은 줄 끝이 아니라 줄 끝에서 모든 줄 바꿈을 제거합니다.


35
s = s.rstrip()

문자열 끝에서 모든 줄 바꿈을 제거합니다 s. rstrip원래 문자열을 수정하는 대신 새 문자열을 반환 하므로 할당이 필요 합니다.


33

이것은 "\ 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을 고려합니다)


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

또는 항상 정규 표현식으로 괴짜를 얻을 수 있습니다 :)

재미 있어요!


이것은 줄 끝이있는 텍스트 파일을 한 줄의 텍스트로 빠르게 전환하려고 시도하는 데 효과적이었습니다. 나는 초보자이기 때문에 더 좋은 방법이 있는지 확실하지 않지만 잘 작동했습니다. 감사합니다! (스트립은 내부가 아닌 끝에서만 작동하는 것처럼 보였습니다)
— Steve Koch

2
.replace('\n|\r', '')? 와 같은 하나의 replace 문을 사용하지 않는 이유는 무엇 입니까?
— Doorknob

2
다른 사람이 @DoorknobofSnow의 아이디어를 사용하려는 경우 정규식 모듈을 사용하는 것이 약간 변경됩니다 : import re re.sub('\n|\r', '', '\nx\n\r\n')==> 'x'.
— Taylor Edmiston

@TaylorEdmiston이 언급 한대로이 정규식 기술을 사용하는 것이 정답입니다.
— Bhargav

@Bhargav 나는 몇 가지 다른 관련 옵션을 탐색하면서 제안한 대로이 의견에 따라이 질문에 대한 답변을 추가했습니다. 또한 정규식이 str.rstrip 보다이 문제에 대한 더 나은 솔루션이라고 생각하는 이유가 무엇인지 설명했습니다. 왜냐하면 대부분의 답변이 사용하기 때문입니다.
— Taylor Edmiston

27

스트립을 사용할 수 있습니다 :

line = line.strip()

데모:

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

1
이 솔루션을 시도했지만 라인의 선행 공백을 제거합니다.
— Tarik

@Tarik 당신은 rstrip를 사용할 수 있습니다
— Hackaholic

rstrip은 최대 하나의 줄 바꿈 만 삭제하는 chomp와 달리 후행 공백을 모두 삭제합니다.
— Flimm 2016 년

20

rstrip은 많은 수준에서 chomp와 동일한 기능을 수행하지 않습니다. http://perldoc.perl.org/functions/chomp.html을 읽고 chomp가 실제로 매우 복잡하다는 것을 알 수 있습니다.

그러나 내 주요 요점은 chomp가 최대 1 줄 끝을 제거하는 반면 rstrip은 가능한 한 많은 것을 제거한다는 것입니다.

다음은 모든 줄 바꿈을 제거하는 rstrip을 볼 수 있습니다.

>>> 'foo\n\n'.rstrip(os.linesep)
'foo'

다음과 같이 rel을 사용하여 일반적인 Perl chomp 사용법을 훨씬 더 가깝게 추정 할 수 있습니다.

>>> re.sub(os.linesep + r'\Z','','foo\n\n')
'foo\n'

2
이 중요한 세부 사항을 지적한 사람은 당신뿐입니다. 그러나 위에서 언급 한 것처럼 다른 시스템에서 파일을 읽는 경우 os.linesep를 사용하면 작동하지 않습니다. 파이썬에서는 실제로 줄 끝을 검사하는 데 약간의 작업이 필요할 수 있습니다.
— brianmearns

19

주의 사항 "foo".rstrip(os.linesep): 파이썬이 실행되는 플랫폼의 줄 바꿈 문자 만 꽉 채우게됩니다. 예를 들어 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")Mike가 위에서 말한 것처럼 대신 사용하십시오 .


주목해야 할 또 다른 사항은 최대 하나의 줄 바꿈을 제거하지 않지만 모든 개행을 제거한다는 것 chomp입니다.
— Flimm 2016 년

19

파이썬 문서 의 예제는 단순히을 사용합니다 line.strip().

Perl의 chomp함수는 실제로 문자열이있는 경우에만 문자열 끝에서 하나의 줄 바꿈 시퀀스를 제거합니다.

process개념적 으로이 파일의 각 줄에 유용한 것을 수행하는 데 필요한 함수 인 경우 Python에서 어떻게 할 계획입니까 ?

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)

2
마지막으로 한 번만 제거하고 (실제 chomp와 같이) OS 휴대용입니다.
— Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

13

파이썬으로 프로그래밍하지는 않지만 python.org에서 python 2.2 이상에 대해 S.rstrip ( "\ r \ n")을 옹호 하는 FAQ 를 발견했습니다 .


10
import re

r_unwanted = re.compile("[\n\t\r]")
r_unwanted.sub("", your_text)

2
이것은 또한 원래 질문이 요구하지 않는 탭 공백을 제거합니다. (\ t 문자로 인해)
— NoahR

9

파일 객체에서 촘촘한 줄을 얻는 방법과 평행하게 반복자를 통해 촘촘한 줄을 얻는 것이 편리하다는 것을 알았습니다. 다음 코드를 사용하면됩니다.

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)

참고 :로 operator.methodcaller와 map( itertools.imap파이썬 레벨 생성기 코드를 피하고 (함으로써하지만 틀림없이 내가 / O 오버 헤드 작은 이익을 마스크 가능성이 조금 더 빠른 실행), 당신은 C 층이 일을 밀어 수 Py2에) for line in map(operator.methodcaller('rstrip', '\r\n'), infile):. 여전히로 간주 될 수 있습니다 def chomped_lines(it): return map(operator.methodcaller('rstrip', '\r\n'), it).
— ShadowRanger

8

특수한 경우에 대한 해결 방법 :

개행 문자가 마지막 문자 인 경우 (대부분의 파일 입력의 경우와 마찬가지로) 컬렉션의 모든 요소에 대해 다음과 같이 색인을 생성 할 수 있습니다.

foobar= foobar[:-1]

줄 바꿈 문자를 잘라냅니다.


3
때때로 줄 바꿈이 아닌 마지막 문자, 그러나 다른 사람으로 특별히 윈도우의 마지막 것들, 뾰족한 밖으로있다.
— Cacovsky 2016 년

8

질문이 여러 줄 str 객체 (oldstr)에서 모든 줄 바꿈을 정리하는 경우 구분 기호 '\ n'에 따라 목록으로 나누고이 목록을 새 str (newstr)에 결합 할 수 있습니다.

newstr = "".join(oldstr.split('\n'))


7

perl의 chomp에 대한 완벽한 아날로그가없는 것 같습니다 . 특히 rstrip은와 같은 여러 문자 줄 바꿈 구분자를 처리 할 수 ​​없습니다 \r\n. 그러나 분할 선 은 여기에서 지적한대로 입니다. 다른 질문에 대한 내 대답 에 따라 조인 과 분할 선 을 결합 하여 문자열에서 모든 줄 바꿈을 제거 / 교체 할 수 있습니다 s.

''.join(s.splitlines())

다음은 정확히 하나의 후행 줄 바꿈을 제거합니다 (나는 생각하는 것처럼). 분리선에 True대한 keepends인수로 전달 하면 구분 기호가 유지됩니다. 그런 다음 마지막 "줄"에서 구분 기호를 제거하기 위해 분할 선이 다시 호출됩니다.

def chomp(s):
    if len(s):
        lines = s.splitlines(True)
        last = lines.pop()
        return ''.join(lines + last.splitlines())
    else:
        return ''

7

다른 답변의 의견에 앞서 게시 한 답변에서 정규 표현식 기반 답변을 버블 링하고 있습니다. 사용 re하는 것이이 문제에 대한보다 명확한 해결책 이라고 생각 str.rstrip합니다.

>>> import re

하나 이상의 후행 줄 바꿈 문자 를 제거하려면 다음을 수행하십시오 .

>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'

개행 문자를 어디에서나 제거하려면 (후행이 아닌) :

>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'

만 1-2 후행 개행 문자를 제거 할 경우 (즉, \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'

( ?:비 캡처 그룹을 만드는 것입니다.)

(그런데이는 없습니다 어떤 '...'.rstrip('\n', '').rstrip('\r', '')이 스레드에 걸림돌.을 명확하지 않을 수 않는 str.rstrip같은 문자열이되도록 스트립을 가능한 한 뒤 문자의 많은으로 foo\n\n\n의 위양성을 초래할 것이다 foo당신이 보존 싶었을 수있는 반면 하나의 후행 줄을 제거한 후 다른 줄 바꿈.)


정규식을 사용하면 최종 접근 방식에서도 캡처하지 않은 그룹을 건너 뛸 수 r'\r?\n$'있습니다. 정규식 엔진은 교체 최적화에 더 많은 시간이 걸리기 때문에 더 효율적일 수 있습니다. 또한 여러 번이 작업을 수행하는 경우 식에 앞서 (특히 다른 re용도 와 혼용하는 경우) 훨씬 빠르며 컴파일 된 정규식 객체 re.compile의 sub메서드 를 사용하십시오 . 모듈 함수는 파이썬 수준이며 컴파일 된 정규 표현식에 대한 캐시를 먼저 확인한 다음 (없는 경우 작성 / 캐싱) 일치하는 메소드를 호출하십시오. 해당 조회를 건너 뛰면 도움이됩니다.
— ShadowRanger

1
또한 참고 사항 : \n직접 일치 시키려고하므로 \Zover 를 사용하고 싶을 수도 있습니다 $(또는 문자열 끝에서 개행 직전에 암시 적으로 일치 할 수 \r?$있기 때문에 $match).
— ShadowRanger

5
>>> '   spacious   '.rstrip()
'   spacious'
>>> "AABAA".rstrip("A")
  'AAB'
>>> "ABBA".rstrip("AB") # both AB and BA are stripped
   ''
>>> "ABCABBA".rstrip("AB")
   'ABC'

내가 필요한 예! 따라서 rstrip ( "\ r \ n")은 줄 끝에서 '\ n'과 '\ r'을 조합하여 제거합니다!
— 아고스티노

제공 @Agostino 없음 필요 "\r\n"예를 들어이 : ' spacious \n\r\n\r \n\n'.rstrip()생산' spacious'
— olibre

2
@olibre 당신이 제안하는 코드는 다른 공백 / 공백 문자를 제거 할 것이고, 이것이 필요하지 않을 수도 있습니다. 사실, 나는 eol 문자의 조합 만 제거하면됩니다. 그래도 이것을 지적 해 주셔서 감사합니다.
— Agostino

4

그냥 사용하십시오 :

line = line.rstrip("\n")

또는

line = line.strip("\n")

이 복잡한 물건이 필요하지 않습니다


2
이것은 chomp와 동일하지 않습니다.
— Flimm

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

3

일반적으로 발생하는 세 가지 유형의 줄 끝이 있습니다. \n,\r 및 \r\n. 의 간단한 정규 표현식 re.sub, 즉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.


본격적인 정규 표현식조차 필요하지 않습니다. rstrip("\r\n")포괄입니다. 시도하십시오 print(text_2.rstrip('\r\n')).
— 아고스티노

@Agostino : str.rstrip()문제 가 해결되면 사실 입니다. 어떤 요구 사항에 따라 다릅니다. 이 솔루션은 특히 방금 마지막을 제거해야 할 때 경우에한다 "\n", "\r"또는 "\r\n"전부는 아니지만 그들 (복수가있는 경우 "\n"문자열). 다른 문자열을 re.sub(r"\r?\n?$", "", text_1, 1)반환 "hellothere\n\n"하고 text_1.rstrip("\r\n")반환 "hellothere"합니다.
— internetional

내가 말하려는 것은 그것이 str.strip()전부입니다. 때로는 매우 문제입니다.
— internetional

1

속도에 관심이 있고 (예를 들어, 문자열 목록이 충분하지 않음) 줄 바꿈 문자의 특성을 알고 있으면 문자열 슬라이싱이 실제로 rstrip보다 빠릅니다. 이것을 설명하기위한 약간의 테스트 :

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

함수 내에서 "전역 루프"를 사용해야 할 수도 있지만 이것이 잘 작동합니다.
— Stephen Miller

이 테스트는 .. 잘못이 아니라 공정한에서 method1방금 마지막 문자, 무엇에 상관없이 잘라낸하는 는 먼저, 만약 문자열의 끝이 원하지 않는 문자가 포함 된 일부가 발견 된 경우에만 그들을 갈비를. 문자를 확인 하고 agin을 테스트하십시오! method2.rstrip()method1
— spky

대답 소개에서 말했듯이 줄 바꿈 문자의 특성을 알고 있다면 유용합니다. 그렇지 않다면 분명히 일종의 문자 검사를 구현하거나 rstrip을 사용해야합니다. 나는 rstrip하기 위해 "불공평하다"는 말이 아니라, 어떤 상황에서는 고려할 가치가없는 중요하지 않은 차이를 간단히 설명했다.
— Stephen Miller

1

이것은 Windows와 Linux 모두에서 작동합니다 (re 해결책 만 찾고 있다면 re sub로 조금 비쌉니다)

import re 
if re.search("(\\r|)\\n$", line):
    line = re.sub("(\\r|)\\n$", "", line)


3
왜 re.search필요한 곳에 사용 re.sub합니까?
— wjandrea

0

먼저 분할 선을 원하는 구분 기호로 연결하십시오.

x = ' '.join(x.splitlines())

매력처럼 작동합니다.


-1

모두 잡아라 :

line = line.rstrip('\r|\n')

5
rstrip정규 표현식을 사용하지 않습니다. "hi|||\n\n".rstrip("\r|\n")반환"hi"
— Flimm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.