파이썬 문자열 분리 - paisseon munjayeol bunli

파이썬에서 문자열을 리스트로 나누거나, 리스트를 문자열로 결합할 수 있다.

1. 문자열 나누기 : split()

split() 메서드는 인자로 주어진 문자를 이용해 문자열을 분리하고, 그 결과를 리스트로 반환한다.

인자가 없이 호출했을 경우에는 줄바꿈, 스페이스, 탭을 사용해서 분리한다.

 >>> name = 'Kang Hodong,Park Sangmin,Kim Yuna'

>>> name.split(',')                                                             # 콤마(,)를 인자로 줘서 콤마로 구분된 결과를 리스트로 출력

['Kang Hodong', 'Park Sangmin', 'Kim Yuna']

>>> name.split()                                                               # 인자를 주지 않아서 공백으로 문자 구분. 예상치않은 결과 출력

['Kang', 'Hodong,Park', 'Sangmin,Kim', 'Yuna']

위 예에서 첫번째는 이름 사이에 있는 콤마를 인자로 줘서 콤마로 문자열이 나눠졌다. 

그래서 리스트에 이름 세개가 정확하게 나뉘었다.

두번째 예에서는 인자를 주지 않고 실행했기 때문에 공백을 이용해서 문자를 나누었다.

결과적으로 'Kang Hodong'이란 이름에서 'Kang'이 분리되었고, 그 다음 공백이 있는 곳까지 구분이 되었기 때문에 

'Hodong,Park'이 인자로 구분되었다.

결과적으로 알아보기 힘든 내용으로 리스트 인자가 구성되었다.

문자열 구분인자는 명시적으로 지정해 주는것이 좋다.

2. 문자열 결합하기 : join()

문자열을 리스트로 나눌 수도 있지만, join()함수를 이용하면 주어진 시퀀스(리스트, 튜플, 딕셔너리)를 문자열로 되돌릴 수도 있다.

문자열 클래스에 속한 메서드이기 때문에 각 리스트 사이에 들어갈 문자를 먼저 적어주고 join() 메서드를 호출하면된다.

인자로 시퀀스를 주면 된다.

예를 한번 살펴보자.

위 예에서 이름을 나눈 ['Kang Hodong', 'Park Sangmin', 'Kim Yuna'] 리스트를 사용해 보자.

리스트를 다시 콤마로 구분된 문자열로 만들어보자

>>> name_list

['Kang Hodong', 'Park Sangmin', 'Kim Yuna']

>>> ','.join(name_list)                                                       # 콤마를 이용해서 문자 생성

'Kang Hodong,Park Sangmin,Kim Yuna'

>>> '||'.join(name_list)                                                      # '||'를 이용해서 문자 생성

'Kang Hodong||Park Sangmin||Kim Yuna'

>>> '~~~'.join(name_list)                                                  

'Kang Hodong~~~Park Sangmin~~~Kim Yuna'                      

어떤 문자를 사용하든 잘 연결된다.

튜플로 해도 문자열이 잘 만들어진다.

>>> name_tuple = ('a','b','c')

>>> name_tuple

('a', 'b', 'c')

>>> type(name_tuple)

<class 'tuple'>

>>> '~~~'.join(name_tuple)

'a~~~b~~~c' 

딕셔너리로 해보면 어떻게 될까?

>>> name_dict = {'a' : 'Kang Hodong', 'b':'Park Sangmin', 'c':'Kim Yuna'}

>>> ','.join(name_dict)

'a,b,c'

키만 인자로 전달돼서 문자열로 합쳐진다.

값을 전달하고 싶으면 values() 메서드를 사용하면된다.

물론 명시적으로 키 값을 전달하고 싶으면 keys()메서드를 사용하면 된다.

>>> ','.join(name_dict.values())

'Kang Hodong,Park Sangmin,Kim Yuna'

>>> ','.join(name_dict.keys())

'a,b,c'

특정 문자로 문자열 나누기

str = "동해물과 백두산이 마르고"
result = str.split()
print(result)

# ['동해물과', '백두산이', '마르고']

문자열을 자를 땐 split 메서드를 사용하면 됩니다. 띄어쓰기로 문자열을 나누고 싶을 땐 split그대로 사용하면 되고 ', '나 ':' 등 다양한 문자로 나누고 싶을 땐 해당 문자를 전달해주면 됩니다. 반환 값은 리스트 형식입니다!

str = "동해물과:백두산이:마르고"
result = str.split(':')
print(result)

# ['동해물과', '백두산이', '마르고']

문자열 바꾸기

str = 'Hello, world!'
str[7] = 'k'

# TypeError                                 Traceback (most recent call last)
# <ipython-input-40-8bebd457364d> in <module>
#      1 str = 'Hello, world!'
# ----> 2 str[7] = 'k'

# TypeError: 'str' object does not support item assignment

위와 같이 문자열의 바꾸고 싶은 부분을 바꾸게 되면 에러가 발생합니다.

만약 바꾸고 싶은 문자를 알고 있는 상태라면 replace() 메서드를 활용할 수 있습니다.

a = "Life is too short"
a.replace("Life", "Your leg")
'Your leg is too short'

그렇지만 바꾸고 싶은 문자는 모르지만 위치를 알고 있는 경우 문자열을 리스트로 변환한 뒤 수정해줘야 합니다.

a = 'Hello, world'
new = list(a)
new[1] = 'a'
''.join(new)

# 'Hallo, world'

혹은

a = 'Hello, world'
b = a[:1] + 'a' + a[2:]
b

# 'Hallo, world'

두 방법 모두 생각보다 귀찮은 작업입니다 ㅠ 속도는 두 번째가 더 빠르니 익숙해지는 수밖에 없겠네요

python split 문자열 자르기 기능.

1. text.split의 기본 기능

  • split 은 기본적으로 문자열을 원하는 문자를 기준으로하여 양 옆으로 나누는 함수이다.
  • 아래와 같이 1.[행성] 2.나라 3.시 4.구 5.주소의 형식으로 대괄호와 _아래 슬레쉬를 통하여 카테고리를 분류해 놓은 확장자 jpg인 사진이 있다고 가정해 두고 학습해본다.

text = "[지구]대한민국_서울시_용산구_우리집.jpg"

2. split 함수의 형식

  • split의 형식은 다음과 같다.
  • 객체.split("자를 기준이 되는 문자")

2-1. 먼저 위의 사진 파일의 확장자 명인 . 를 기준으로 분리 해보자.

['[지구]대한민국_서울시_용산구_우리집', 'jpg']

  • 결과는 위와 같이 .을 기준으로 하여 앞, 뒤로 2개의 문자열로 분리 되었다.

2-2. 그렇다면 ".jpg" 를 제외한 앞 열을 선택해보자.

# [-1]로 선택해도 마찬가지이다. 
text.split(".")[-1]

2-3. 다음은 _로 나누어진 각각의 카테고리를 모두 분리해보자.

['[지구]대한민국', '서울시', '용산구', '우리집.jpg']

  • 위의 결과와 같이 _를 기준으로하여 모든 부분이 분리 되었다.
  • 각각의 값들을 순서대로 하나씩 선택해본다.

print(text.split("_")[0])
print(text.split("_")[1])
print(text.split("_")[2])
print(text.split("_")[3])

3. split 중첩

  • 이번에는 조금 더 응용하여 행성과 국적 카테고리만 뽑아보도록 하자.

'[지구]대한민국_서울시_용산구_우리집.jpg'

text.split("]")[1].split("_")[0]

text.split("[")[1].split("]")[0]

python split, python 확장자, Split, 문자열 분리, 문자열 선택, 문자열 제거, 문자열 찾기, 확장자 제거

댓글