문자열에서 모든 공백을 제거하는 방법


179

파이썬 문자열의 모든 공백을 어떻게 제거합니까? 예를 들어, 문자열 strip my spaces을로 바꾸고 stripmyspaces싶지만 strip()다음 과 같이 달성 할 수는 없습니다 .

>>> 'strip my spaces'.strip()
'strip my spaces'

13
str.strip은 앞뒤 공백에만 영향을 미칩니다.

답변:


311

sep 매개 변수없이 str.split의 동작 활용 :

>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'

모든 공백 대신 공백을 제거하려는 경우 :

>>> s.replace(" ", "")
'\tfoo\nbar'

조기 최적화

명확한 코드를 작성하는 것이 효율성이 주요 목표는 아니지만 초기 타이밍은 다음과 같습니다.

$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop

정규식이 캐시되어 있으므로 예상보다 느리지 않습니다. 미리 컴파일하면 도움이 될 수 있지만 여러 번 호출하면 실제로 중요합니다 .

$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop

re.sub의 속도는 11.3 배 더 느리지 만 병목 현상은 다른 곳에서도 확실하게 기억하십시오. 대부분의 프로그램은이 3 가지 선택의 차이점을 인식하지 못합니다.


\s+대체 보다 느릴 것 입니다. 나는 다시 붙어 있습니다.
— OTZ

@OTZ : 놀랄지도 모르지만 "기억하십시오"메모를보십시오.

@ 로거 흠. 흥미 롭군 우연히이 s.translate방법 을 사용해 보셨습니까 ? 아마도이 페이지에 표시된 모든 방법을 능가 할 것입니다.
— OTZ

@Roger Pate : 번역에 '테이블'인수가 필요 None하지는 않지만 놀랍게도 속도가 느려질 수 있습니다.
— martineau

1
시도하십시오 myString.translate(None, " \t\r\n\v"). Roger의 가장 빠른 (분할 및 조인) 기술에 비해 83 % 만 소요됩니다. 분할되는 모든 공백 문자를 포함하는지 확실하지 않지만 대부분의 ASCII 응용 프로그램에는 충분합니다.
— brianmearns

60
>>> import re
>>> re.sub(r'\s+', '', 'strip my spaces')
'stripmyspaces'

또한 당신이 생각하지 않는 공백 문자를 처리합니다 (믿습니다. 많이 있습니다).


3
이것은 대답보다 훨씬 덜 해킹 된 솔루션입니다.
— John Smith

이것은 다른 답변보다 더 분명하므로 케이크가 필요합니다.
— Tristan

34

또는

"strip my spaces".translate( None, string.whitespace )

그리고 여기에 Python3 버전이 있습니다 :

"strip my spaces".translate(str.maketrans('', '', string.whitespace))

이것은 가장 파이썬적인 것 같습니다. 왜 정상에 오르지 않았습니까?
— rbp

대답의 Python 3 코드가 작동합니다. @ DanMenes의 코멘트는 더 이상 사용되지 않습니다
— igo

3
NameError: name 'string' is not defined.
— Zelphir Kaltstahl

당신은 필요 @ZelphirKaltstahlimport string
— Shahryar Saljoughi

13

가장 간단한 방법은 replace를 사용하는 것입니다.

"foo bar\t".replace(" ", "").replace("\t", "")

또는 정규식을 사용하십시오.

import re
re.sub(r"\s", "", "foo bar\t")

10

파이썬에서 시작 공간 제거

string1="    This is Test String to strip leading space"
print string1
print string1.lstrip()

파이썬에서 후행 또는 끝 공간 제거

string2="This is Test String to strip trailing space     "
print string2
print string2.rstrip()

파이썬에서 문자열의 시작과 끝에서 공백을 제거하십시오.

string3="    This is Test String to strip leading and trailing space      "
print string3
print string3.strip()

파이썬에서 모든 공백을 제거하십시오

string4="   This is Test String to test all the spaces        "
print string4
print string4.replace(" ", "")

3

로 정규식을 사용해보십시오 re.sub. 모든 공백을 검색하고 빈 문자열로 바꿀 수 있습니다.

\s패턴에서 공백 (탭, 줄 바꿈 등)뿐만 아니라 공백 문자와 일치합니다. 자세한 내용 은 설명서를 참조하십시오 .


나는 정규 표현식에 :( 사용하는 방법을 몰라
— wrongusername

@wrongusername : re 모듈 매뉴얼 페이지에 대한 링크로 업데이트되었습니다.
— Matthew Iselin

2
import re
re.sub(' ','','strip my spaces')

3
SO에 오신 것을 환영합니다. 답변 해 주셔서 감사하지만 다른 답변보다 추가 가치를 제공하는 것이 좋습니다. 이 경우 다른 사용자가 해당 솔루션을 이미 게시 했으므로 귀하의 답변은 추가 가치를 제공하지 않습니다. 이전 답변이 도움이 되었으면 평판이 충분 해지면 투표해야합니다.
— Maximilian Peters

"모든 공백을 제거하는 방법"이라는 질문에는 대답하지 않습니다. 공백 만 제거
— Nick

2

Roger Pate가 언급했듯이 다음 코드가 나를 위해 일했습니다.

s = " \t foo \n bar "
"".join(s.split())
'foobar'

Jupyter Notebook을 사용하여 다음 코드를 실행하고 있습니다.

i=0
ProductList=[]
while i < len(new_list): 
   temp=''                            # new_list[i]=temp=' Plain   Utthapam  '
   #temp=new_list[i].strip()          #if we want o/p as: 'Plain Utthapam'
   temp="".join(new_list[i].split())  #o/p: 'PlainUtthapam' 
   temp=temp.upper()                  #o/p:'PLAINUTTHAPAM' 
   ProductList.append(temp)
   i=i+2

2

목록을 필터링하는 표준 기술은 split/join또는 translate방법 만큼 효율적이지 않지만 적용됩니다 .

공백 세트가 필요합니다 :

>>> import string
>>> ws = set(string.whitespace)

filter내장 :

>>> "".join(filter(lambda c: c not in ws, "strip my spaces"))
'stripmyspaces'

목록 이해 (예, 괄호 사용 : 아래 벤치 마크 참조) :

>>> import string
>>> "".join([c for c in "strip my spaces" if c not in ws])
'stripmyspaces'

배 :

>>> import functools
>>> "".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))
'stripmyspaces'

기준:

>>> from timeit import timeit
>>> timeit('"".join("strip my spaces".split())')
0.17734256500003198
>>> timeit('"strip my spaces".translate(ws_dict)', 'import string; ws_dict = {ord(ws):None for ws in string.whitespace}')
0.457635745999994
>>> timeit('re.sub(r"\s+", "", "strip my spaces")', 'import re')
1.017787621000025

>>> SETUP = 'import string, operator, functools, itertools; ws = set(string.whitespace)'
>>> timeit('"".join([c for c in "strip my spaces" if c not in ws])', SETUP)
0.6484303600000203
>>> timeit('"".join(c for c in "strip my spaces" if c not in ws)', SETUP)
0.950212219999969
>>> timeit('"".join(filter(lambda c: c not in ws, "strip my spaces"))', SETUP)
1.3164566040000523
>>> timeit('"".join(functools.reduce(lambda acc, c: acc if c in ws else acc+c, "strip my spaces"))', SETUP)
1.6947649049999995

0

TL / DR

이 솔루션은 Python 3.6을 사용하여 테스트되었습니다.

Python3의 문자열에서 모든 공백을 제거하려면 다음 함수를 사용할 수 있습니다.

def remove_spaces(in_string: str):
    return in_string.translate(str.maketrans({' ': ''})

공백 문자 ( '\ t \ n \ r \ x0b \ x0c')를 제거하려면 다음 기능을 사용할 수 있습니다.

import string
def remove_whitespace(in_string: str):
    return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))

설명

파이썬의 str.translate메소드는 str의 내장 클래스 메소드이며, 테이블을 가져와 전달 된 변환 표를 통해 각 문자가 맵핑 된 문자열의 사본을 리턴합니다.str.translate에 대한 전체 문서

번역 테이블을 만드는 str.maketrans데 사용됩니다. 이 메소드는의 또 다른 내장 클래스 메소드입니다 str. 여기서는 하나의 매개 변수 (이 경우 사전)와 함께 사용합니다. 여기서 키는 대체 될 문자와 문자 대체 값으로 매핑됩니다. 와 함께 사용할 변환 표를 반환합니다 str.translate. str.maketrans에 대한 전체 문서

string파이썬 의 모듈에는 일반적인 문자열 연산과 상수가 포함되어 있습니다. string.whitespace공백으로 간주되는 모든 ASCII 문자가 포함 된 문자열을 반환하는 상수입니다. 여기에는 문자 공간, 탭, 줄 바꿈, 반환, 용지 공급 및 세로 탭이 포함됩니다.문자열에 대한 전체 설명서

두 번째 함수 dict.fromkeys에서는 키가 string.whitespacevalue 가있는 문자열로 반환되는 문자 인 사전을 만드는 데 사용됩니다 None. dict.fromkeys에 대한 전체 문서


0

최적의 성능이 요구되지 않고 단순히 단순한 것을 원한다면 문자열 클래스의 내장 "isspace"메소드를 사용하여 각 문자를 테스트하는 기본 함수를 정의 할 수 있습니다.

def remove_space(input_string):
    no_white_space = ''
    for c in input_string:
        if not c.isspace():
            no_white_space += c
    return no_white_space

건물 no_white_space문자열은이 방법으로 이상적인 성능을 가지고 있지만,이 솔루션은 이해하기 쉬운되지 않습니다.

>>> remove_space('strip my spaces')
'stripmyspaces'

함수를 정의하지 않으려는 경우이를 목록 이해와 모호한 것으로 변환 할 수 있습니다. 최고 답변의 join솔루션 에서 차용 :

>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.