본문 바로가기
IT/파이썬(Python)

[파이썬] 문자열을 지지고 볶는 함수(문자열 메소드)

by 쭝이얌 2022. 3. 17.

문자열에서 함수를 쓴다?

함수는 숫자(수학)에서만 사용하는 것이 아니에요...

파이썬에서 함수는

입력된 A라는 재료에 k라는 양념을 뭍혀 B라는 요리를 만들어 내는

도구로 넓게 받아들여 주세요.

요리도구(함수) : k(양념) * A(재료) → B(요리)

 

메소드와 함수는 엄밀히는 다르지만 본 내용에서는 유사한 기능으로 생각해주세요...

추후 클래스에서 다시 설명해볼까 합니다.

문자열 메소드는 문자열 내용을 꾸밀 수도, 바꿀 수도, 찾을 수도 있습니다.

아래표는 문자열에서 사용하는 메소드입니다.

(자주 사용하는 메소드는 붉게 표시했습니다.)

메소드명 기능 or 효과 결과
startswith( ) 문자열이 (괄호)안의 내용으로 시작하는지 판단 True / False
endswith( ) 문자열이 (괄호)안의 내용으로 종료하는지 판단 True / False
find( ) 문자열 내부에서 (괄호)안의 내용이 존재하는 위치를 앞에서부터 탐색 숫자 / -1(없음)
rfind( ) 문자열 내부에서 (괄호)안의 내용이 존재하는 위치를 뒤에서부터 탐색 숫자 / -1(없음)
count( ) 문자열 내부에서 (괄호)안의 내용이 몇 번 나오는지 숫자
lstrip( ) 문자열 가장 왼쪽의 공백을 제거  
rstrip( ) 문자열 가장 오른쪽의 공백을 제거  
strip( ) 문자열 양쪽의 공백을 제거  
isalpha( ) 문자열이 알파벳(한글 포함)으로만 구성되는지 판단 True / False
isnumeric( ) 문자열이 숫자로만 구성되는지 판단 True / False
isalnum( ) 문자열이 알파벳 or 숫자로만 구성되는지 판단 True / False
replace(A,B) 문자열 내용 중, 내용A → 내용B로 변경  
split( ) 문자열을 (괄호)내용을 기준으로 리스트로 분리  
upper( ) 문자열 내용을 모두 대문자로 변경  
lower( ) 문자열 내용을 모두 소문자로 변경  
format( ) 문자열 내용 중 {증괄호}에 차례로 (괄호)내용을 넣어주는 효과  

 

그럼 문자열 메소드는 어떻게 사용할까?

문자열변수와 메소드 사이에 있는 "."(마침표)

한국말로 "~에 or ~의"로 해석하면 받아들이기 쉽습니다.^^

해석하면, 문자열변수에 메소드를 적용합니다 + ( 괄호 )안의 내용을 반영해서요...

다음 예를 들어봅니다.

avengers = "아이언맨, 캡틴아메리카, 토르, 블랙위도우, 호크아이, 헐크"

# avengers[에="."] "호크아이"를 "스파이더맨"으로 바꿔줍니다.
avengers.replace("호크아이", "스파이더맨")

# avengers[에="."] "(쉼표)"가 몇개 존재하는지 세어줍니다.
avengers.count(",")

메소드 하나씩 테스트 해보기

__01. startswith / endswith

# hero라는 변수에 "spider-man"을 입력합니다.
hero = "spider-man"

# hero 변수 내용이 "spider"로 시작하면 True를 반환(보여줌)합니다.
hero.startswith("spider")
>> True

# hero 변수 내용이 "man"로 끝하면 True를 반환(보여줌)합니다.
hero.endswith("man")
>> True

 

__02. find / rfind

# find / rfind로 단어 위치 찾기 (주의: 첫글자는 0번으로 시작)
스페이스환타지 = "가자가자 이박사, 달려달려 가재발"

# "이박사" 단어가 시작되는 위치 찾기
스페이스환타지.find("이박사")
>> 5  

# "가자" 단어 찾기 (가자 단어는 2번 중복되어 들어있음)
스페이스환타지.find("가자")
>> 0 

# 뒤에서 부터 "달려달려" 단어를 탐색하고, 위치 찾기
스페이스환타지.rfind("달려달려")
>> 10

 

__03. count

# 노래가사에서 "피카"가 몇 번 반복될까?

포켓몬 = """자 이제 시작이야 (내꿈을) 내꿈을 위한 여행 (피카츄) 
            걱정따윈 없어 (없어) 내친구랑 함께니까 (피카피카) 
            처음 시작은 어색할지도 몰라 (몰라)
            내친구 피카츄"""
            
포켓몬.count("피카")
>> 4

 

__04. lstrip / rstrip / strip

# 빨간토마토의 양쪽에 공백이 한칸씩 존재한다. 이것을 없애보자
과일채소 = " 빨간토마토 "

과일채소.lstrip()
>> '빨간토마토 '

과일채소.rstrip()
' 빨간토마토'

과일채소.strip()
'빨간토마토'

 

__05. isalpha / isnumeric / isalnum

name = "Parker"
name.isalpha()
>> True

lucky = "777"
lucky.isnumeric()
>> True

cell = "IPHONE14"
cell.isalnum()
>> True

robot = "Ironman Mark2"
name.isalnum()
>> False       # 공백(띄어쓰기)은 False로 반환

robot = "Ironman-Mark2"
name.isalnum()
>> False       # 특수문자는 False로 반환

 

__06. replace

나의고향 = "나의 살던 고향은 꽃피는산골"
나의고향.replace("꽃피는산골", "청송교도소")
>> '나의 살던 고향은 청송교도소'

네... 아재 맞아요...

 

__07. split

포켓몬 = "피카츄, 라이츄, 파이리, 꼬부기, 버터플, 야도란"
포켓몬.split(", ")
>> ['피카츄', '라이츄', '파이리', '꼬부기', '버터플', '야도란']   # 대괄호(리스트)로 분리됨

 

__08. upper / lower

cell_phone = "Samsung Galaxy 22"

cell_phone.upper()
>> 'SAMSUNG GALAXY 22'   # 모든 알파벳이 대문자로 변경

cell_phone.lower()
>> 'samsung galaxy 22'   # 모든 알파벳이 소문자로 변경

 

 

__09. format

format은 자주사용 하니 꼭 알아두세요

문자열 내용에 "{자리}"를 포함하고 있고,

format( 대상(자리0), 대상(자리1) )에서 자리에 해당하는 대상을 내용으로 채웁니다.

{0} : Apple 대입 ( 자리0에 해당 )

{2} : Xiaomi 대입 ( 자리2에 해당 )

{1} : Samsung 대입 ( 자리1에 해당 )

gold = "10 ea"
silver = "8 ea"
bronze = "5 ea"

"이번 올림픽 성과는 금메달:{0}, 은메달:{1}, 동메달:{2} 입니다.".format(gold, silver, bronze)
>> '이번 올림픽 성과는 금메달:10 ea, 은메달:8 ea, 동메달:5 ea 입니다.'

# 메달 갯수가 변경되면 gold, siver, bronze 내용만 바꾸면 되므로 편리함

 

정리

  1. 문자열 메소드(함수)는 문자열 내용을 편리하게 조작할 수 있음
  2. 사용형태는 "문자열변수.메소드(공백 or 특정문자)" 와 같음
  3. 해석방법은 문자열변수에 메소드를 적용한다. ( 괄호 ) 내용을 반영하면서
  4. 자주 사용하는 문자열 메소드는 [ rstrip, isnumeric, replace, split, format ] 등이 있음