programing

Python에서 콤마로 분할하고 공백을 제거하는 방법은 무엇입니까?

newstyles 2023. 4. 14. 21:23

Python에서 콤마로 분할하고 공백을 제거하는 방법은 무엇입니까?

쉼표로 분할되는 파이썬 코드가 있지만 공백은 제거하지 않습니다.

>>> string = "blah, lots  ,  of ,  spaces, here "
>>> mylist = string.split(',')
>>> print mylist
['blah', ' lots  ', '  of ', '  spaces', ' here ']

이렇게 공백이 제거되는 것이 좋습니다.

['blah', 'lots', 'of', 'spaces', 'here']

목록을 반복하여 각 항목을 제거할 수 있다는 것을 알고 있지만, Python이기 때문에 더 빠르고 쉽고 우아한 방법이 있을 것입니다.

목록 이해 사용 - 단순하고 읽기 쉬우며for고리.

my_string = "blah, lots  ,  of ,  spaces, here "
result = [x.strip() for x in my_string.split(',')]
# result is ["blah", "lots", "of", "spaces", "here"]

참조: 목록 이해에 대한 Python 문서
목록 이해에 대한 좋은 2초 설명.

추가하러 왔습니다.

map(str.strip, string.split(','))

Jason Orendorff가 이미 댓글로 언급한 것을 보았습니다.

같은 답변에 대한 글렌 메이너드의 설명을 읽고 지도에 대한 이해도를 제시하면서 나는 왜 그런지 궁금해졌다.퍼포먼스상의 이유라고 생각했지만, 물론 스타일적인 이유나 다른 것(글렌?)을 의도했을지도 모릅니다.

따라서 이 세 가지 방법을 루프에 적용한 내 박스(Ubuntu 10.04의 Python 2.6.5)에 대한 빠른 테스트(결함 가능성 있음)가 밝혀졌습니다.

$ time ./list_comprehension.py  # [word.strip() for word in string.split(',')]
real    0m22.876s

$ time ./map_with_lambda.py     # map(lambda s: s.strip(), string.split(','))
real    0m25.736s

$ time ./map_with_str.strip.py  # map(str.strip, string.split(','))
real    0m19.428s

만들기map(str.strip, string.split(','))같은 야구장에 있는 것 같긴 하지만 우승자가 되는 것 같아요.

물론 성능상의 이유로 (람다 유무에 관계없이) 맵을 반드시 배제할 수는 없지만, 적어도 목록 이해만큼 명확합니다.

정규식을 사용하여 분할합니다.선두에 공백이 있는 경우를 좀 더 일반적으로 설명했습니다.목록 이해는 앞면과 뒷면에 있는 늘 문자열을 제거하는 것입니다.

>>> import re
>>> string = "  blah, lots  ,  of ,  spaces, here "
>>> pattern = re.compile("^\s+|\s*,\s*|\s+$")
>>> print([x for x in pattern.split(string) if x])
['blah', 'lots', 'of', 'spaces', 'here']

이 방법은^\s+일치하지 않음:

>>> string = "foo,   bar  "
>>> print([x for x in pattern.split(string) if x])
['foo', 'bar']
>>>

필요한 이유는 다음과 같습니다.^가 필요한 이유는 다음과 같습니다.

>>> pattern = re.compile("\s*,\s*|\s+$")
>>> print([x for x in pattern.split(string) if x])
['  blah', 'lots', 'of', 'spaces', 'here']

blah의 선두 칸 보이지?

설명: 위에서는 Python 3 인터프리터를 사용하지만 결과는 Python 2에서도 동일합니다.

분할하기 전에 문자열에서 공백을 제거하십시오.

mylist = my_string.replace(' ','').split(',')

이미 답변이 끝난 것은 알지만, 이 작업을 많이 끝내면 정규 표현을 사용하는 것이 더 나을 수 있습니다.

>>> import re
>>> re.sub(r'\s', '', string).split(',')
['blah', 'lots', 'of', 'spaces', 'here']

\s모든 공백 문자와 일치하며 빈 문자열로 대체합니다.''자세한 것은, http://docs.python.org/library/re.html#re.sub 를 참조해 주세요.

map(lambda s: s.strip(), mylist)명시적으로 루프하는 것보다 조금 낫다고 생각합니다.또는 모든 것을 한꺼번에 처리한다.map(lambda s:s.strip(), string.split(','))

import re
result=[x for x in re.split(',| ',your_string) if x!='']

이거면 되겠네요.

re(정규 표현과 같이)를 사용하면 여러 문자를 동시에 분할할 수 있습니다.

$ string = "blah, lots  ,  of ,  spaces, here "
$ re.split(', ',string)
['blah', 'lots  ', ' of ', ' spaces', 'here ']

이것은 예제 문자열에서는 잘 작동하지 않지만 쉼표로 구분된 목록에서는 잘 작동합니다.예제 문자열의 경우 re.split 파워를 결합하여 regex 패턴으로 분할하여 "split-on-this-or-that" 효과를 얻을 수 있습니다.

$ re.split('[, ]',string)
['blah',
 '',
 'lots',
 '',
 '',
 '',
 '',
 'of',
 '',
 '',
 '',
 'spaces',
 '',
 'here',
 '']

만, 쉽쉽 unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortunfilter과가있있 있있있다다

$ filter(None, re.split('[, ]',string))
['blah', 'lots', 'of', 'spaces', 'here']

보일라!

s = 'bla, buu, jii'

sp = []
sp = s.split(',')
for st in sp:
    print st
import re
mylist = [x for x in re.compile('\s*[,|\s+]\s*').split(string)]

단순히 쉼표 또는 하나 이상의 공백(앞/뒤에 공백이 있음/없음)을 사용합니다.

꼭 해보세요!

언급URL : https://stackoverflow.com/questions/4071396/how-to-split-by-comma-and-strip-white-spaces-in-python