본문 바로가기
Python/Python 초급

Python 파이썬 String, str(), 문자열 데이터 타입

by 베타코드 2021. 11. 18.
반응형

안녕하세요 독학코딩입니다. 오늘은 문자열 데이터 타입의 연산자에 대해서 배워보도록 하겠습니다. 한글로 연산자라고 하면 사칙연산이 생각나게 되지만 연산자는 영어로 operator라고 합니다. operator, 한글로는 운전자, 조작자 이런 느낌입니다. 조금 더 이해하기 좋은가요?

Nonetype = 타입이 없는 자료입니다.
bool = 참, 거짓을 의미합니다. ex) true, false
int = 숫자형을 의미합니다. ex) 1, 2, 3
float = 소수점이 있는 숫자를 의미합니다. ex) 2.334, 5.125
str = 텍스트를 의미합니다. ex) "안녕", "사과"
list = 리스트라고 합니다. []로 표현됩니다. 
	ex) ["안녕", "사과"], [1, 2, 3, 4], [2.33, 4.21, 5.32]
tuple = 튜플이라고 합니다. ()로 표현됩니다. 한번 구성하면 구성원을 변경할 수 없습니다. 
	ex) ("안녕", "사과"), (1, 2, 3, 4), (2.33, 4.21, 5.32)
dict = 딕트, 딕셔너리라고 합니다. {}로 표현됩니다. key와 value로 구성 되어있어 원하는 자료를 찾기 편합니다. 
	ex) {"이름"="홍길동", "나이"="43", "도시"="서울"} 
    	여기서 이름, 나이, 도시를 key, 홍길동, 43, 서울은 value 입니다.

친숙하죠? 지난 시간에 봤던 겁니다. 여기서 문자열 데이터 타입은 str입니다. 정확히는 String, 스트링이라고 읽습니다. 저는 str이라고 표현하겠습니다. 아마 파이썬을 사용하시면서 가장 많이 사용하게 되는 데이터 타입이니 오늘은 조금 자세히 배워보도록 하겠습니다. 

 

 


Python 문자열 연산자 종류

문자열 표현 방식 '파이썬', "파이썬", '''파이썬''', """파이썬"""
"파이썬" + "독학" 파이썬독학
"파이썬" * 3 파이썬파이썬파이썬
"파이썬\'독학\'" 파이썬'독학'
"파이썬\n공부" 파이썬
독학
"파이썬독학"[0:2] 파이썬
"파이썬공부".replace("공부", "독학") 파이썬독학
"      파이썬 독학      ".strip 파이썬 독학
"파이썬을공부하자".split("을) ["파이썬", "공부하자"]
"파이썬을{}하자".format("공부") 파이썬을공부하자
"파파이스".count("파") 2
len("파이썬독학") 5

 

Python 문자열 표현 ' ', " ", ''' ''', """ """

str의 연산자를 배우기 이전에 str을 표현하는 방식을 먼저 배워보겠습니다.

str_a = '파이썬'
str_b = "공부하자"
str_c = '''파이썬'''
str_d = """공부하자"""

str을 표현하는 방식의 위의 4가지입니다. 왜 이렇게 많을까요? 세상엔 텍스트로 표현해야 될 것들이 많기 때문이 아닐까요? 예를 들어 한글에는 안 쓰이지만

Python's string operator

이건 어떻게 파이썬으로 작성할 수 있을까요? 어퍼스트로피 S ('s) 같은 거 말이죠.

print('Python's string operator')
print("Python's string operator")
print('''Python's string operator''')
print("""Python's string operator""")

한번 직접 실행해보시면 좋을 것 같습니다. 실행해보시면 왜 여러 가지 표현방식이 있는지 알 수 있을 겁니다. 문자열 사이에 ' , " 이 사용될 수 있기 때문입니다. 보통은 ' ' , " " 만으로 충분하지만 ''' ''' , """ """은 연산자 안에 문자를 문자로 강제할 때 사용합니다. 줄이 바뀌어도 하나의 str으로 인식합니다.(물론 예외도 있습니다.)

참고로 SyntaxError: invalid syntax는 잘못된 구문이라는 의미입니다. 문법이 잘못됐다는 거죠. 

 

 

Python 문자열 연산자 +

+ 연산자는 깊게 설명하지 않겠습니다. 이미 전 시간에 다루었던 주제이니깐요. 단순히 str끼리 합칠 수 있는 기능입니다.

 

 

Python 문자열 연산자 *

저번 포스트를 자세히 보셨다면 * 연산자는 str이 불가능하다고 말한 걸 기억하실 겁니다. 근데 왜 여기서 또 소개하는 걸까요? 저번 포스트에선 str과 str을 * 였습니다. 오류가 났고 불가능한 게 맞습니다. 하지만 str * int 는 어떨까요?

str_a = "파이썬"
print(str_a*3)

네 오류가 없이 실행되었을 겁니다. str과 str의 곱하기는 불가능하지만 str과 int의 곱하기는 가능합니다. 

 

 

Python 문자열 연산자 \

혹시 위에 Python's string operator를 print() 해보셨나요?

print('Python's string operator')

 분명히 위 실행에서 오류가 보셨을 겁니다. 왜 그랬을까요? str의 표현 중 ' 을 사용하고 있는데 파이썬 문법에 따르면 'Pyrhon'에서 str이 끝나고 s string operator' 는 무엇인지 알지 못하니 오류가 나는 겁니다.

print('Python\'s string operator')

그럼 위를 한번 실행해보시겠어요? 참고로 역 슬라이스는 \ 입니다. 그리고 \는 키보드 엔터키 위에 있습니다. 오류가 나왔나요? 아닐 겁니다. 정상적으로 실행되었을 겁니다. 즉, \는 문자열 사이에 예외를 두는 기능입니다.

 

 

Python 문자열 연산자 \n

그럼 \n는 무슨 기능일까요? 실행해봐야 알 수 있겠죠? 

print("Hello\nWorld")

실행해보니 어떻게 나왔나요? 결과가 두 줄로 나왔을 겁니다. 네 \n는 줄 바꿈 기능입니다. 그런데 만약에 파일 경로를 나타낼 때처럼 문자열에 \n를 포함해야 된다면 어떻게 해야 될까요? 

print(r"Hello\"world")
print(r"Hello\nworld")
print(r'C:\myfile\name')
print('''C:\myfile\name''')
print("""C:\myfile\name""")

실행해봐야겠죠? 어떤가요? str 앞에 r를 붙이면 어떻게 됐는지 확인하셨나요? 자꾸 해보라고 시켜서 귀찮으시겠지만, 직접 해보지 않으면 늘지 않습니다. 그런데 ''' ''' 와 """ """은 str을 str으로 강제하는 기능이라고 했는데 왜 두줄로 나왔을까요? 간단합니다. \n가 ''' '''보다 상위의 개념으로 적용되기 때문입니다. (\는 아닙니다. \n만 그렇습니다.)

 

 

Python 문자열 연산자 []

다음 연산자는 []입니다. 어디서 보신 적 있으실 겁니다. 기억나지 않으신다면 이 포스트 제일 위로 가서 데이터 타입을 한번 살펴보시길 바랍니다. []가 무엇이던가요? 네 맞습니다. 리스트입니다. 근데 리스트를 왜 str에서 사용할까요? 리스트는 말 그대로 목록입니다. str도 한 글자 한 글자의 배열로 된 목록으로 볼 수 있는 거죠. 실제 예제로 살펴보겠습니다. 

str_a = '파이썬을 공부하자'
print(str_a[0:3])

실행 결과가 어떤가요? "파이썬"이 출력되었을 겁니다. "파이썬을 공부하자"를  목록으로 본다면 파, 이, 썬, 을, , 공, 부, 하, 자 모두를 목록의 원소로 보는 겁니다. 그래서 0~3까지의 원소를 출력하는 겁니다. 근데 0번째 원소는 뭘까요 도대체?? 

 

파이썬은 실제와는 조금 다른 순서 세는 방식을 갖고 있습니다. 매우 중요하니 꼭 기억하시는 게 좋습니다.

 
0 1 2 3 4 5 6 7 8
-9 -8 -7 -6 -5 -4 -3 -2 -1

파이썬은 배열을 셀 때 위와 같은 방식으로 셉니다. 앞에서부터 셀 때는 0부터 시작하고 뒤에서부터 시작할 때는 -1부터 시작합니다. 한번 실행해서 확인해보시길 바랍니다. 처음에는 다소 헷가릴 수 있지만 익숙해지면 괜찮습니다. 

str_a = '파이썬을 공부하자'
print(str_a[0])
print(str_a[1])
print(str_a[-1])
print(str_a[-2])

 

 

Python 문자열 연산자 .replace

이제 조금 고급과정으로 나아가 보겠습니다. replace는 한글로 무엇인가요? 네 대체하다입니다. 즉 str의 부분을 대체하는 기능을 갖은 연산자입니다. 

str_a = '파이썬을 공부하자'
print(str_a.replace("공부", "독학"))

한번 실행해보시길 바랍니다. 어떻게 결과가 나왔나요? "파이썬을 독학하자" 가 나왔을 겁니다. str에서 어떤 특정 문자를 대체하고 싶다면 replace를 사용하면 됩니다. 명심하셔야 될 건 replace(A, B)라면 A를 B로 대체하는 것입니다.

 

 

Python 문자열 연산자 .strip

strip은 한글로 무엇일까요? 네 벗다입니다. 무엇을 벗는 걸까요? 불필요한 걸 벗는 게 아닐까요? str에서 도대체 불필요한 게 무엇일까요? 

str_a = "    파이썬을 독학하자    "
print(str_a.strip())

실행을 해보아야겠죠? "파이썬을 독학하자"로 결과가 나왔을 겁니다. 그럼 여기서 불필요한 건 무엇이었나요? 네 str의 시작과 끝에 있는 빈칸입니다. 문자열 사이의 빈칸(띄어쓰기)은 제거하지 않습니다. 

 

그런데 앞 혹은 뒤의 빈칸만 삭제하고 싶다면요?? 

str_a = "    파이썬을 독학하자    "
print(str_a.strip())
print(str_a.rstrip())
print(str_a.lstrip())

실행해보시면서 답을 보시면 될 것 같습니다. 어디가 제거된 건지 확실치 않다면 결괏값을 마우스로 드래그해보세요.

 

 

Python 문자열 연산자 .split

split은 좀 특이한 연산자입니다. 여태까지는 str 연산자로 str을 만들어왔습니다. 하지만 split은 나눈다는 의미에 맞게 str을 리스트로 만드는 연산자입니다.

str_a = "1,2,3,4,5,6,7,8,9"
print(str_a.split(","))

실행해보셔야겠죠? ['1', '2', '3', '4', '5', '6', '7', '8', '9'] 라고 결과가 나왔을 겁니다. split(A)를 하면 str을 A로 나누는 겁니다. 그럼 str에 포함된 글자가 아닌 걸로 split을 하면 어떻게 될까요? 

str_a = "1,2,3,4,5,6,7,8,9"
print(str_a.split("0"))
>>> ['1,2,3,4,5,6,7,8,9']

리스트가 되긴 합니다. 근데 이 리스트엔 원소가 몇 개일까요?? 9개인가요? 1개인가요? 파이썬은 데이터를 보실 땐 자세히 보셔야 합니다. 슬쩍 보기엔 쉼표로 나누어져 있는 여러 개의 원소 같지만 실은 하나의 ' ' 로 묶인 1개의 str입니다. 

 

위의 예제도 똑같습니다. ['1', '2', '3', '4', '5', '6', '7', '8', '9'] 이 리스트는 int를 원소로 갖고 있을까요? str을 원소로 갖고 있을까요? 답을 알고 있으실 겁니다. 스스로 여러 split을 실행해보시면 결과를 보시길 바랍니다. "2"로도 해보시고 "5"로도 해보시고 여러 번 해보세요.

 

 

Python 문자열 연산자 .format

format은 한글로 구성하다, 형성하다 인 것 같습니다. 즉 str를 구성하는 연산자입니다. 

str_a = "{}을 {}하자"
print(str_a.format("파이썬", "독학"))

실행해보시면 아시겠지만, format(A)는 str의 {}로 표시한 빈칸에 순서대로 찾아 들어가 str을 구성합니다. 그런데 순서대로가 아니라 원하는 곳에 원하는 단어를 넣고 싶으면 어떻게 해야 될까요?

str_a = "{A}을 {B}하자"
print(str_a.format(B="공부", A="파이썬"))

이렇게 단어가 들어갈 자리인 {}에 A, B로 표시를 하고(어떻게 표시하든 상관없습니다. 단어여도 괜찮습니다.)  format(A=, B=) 이렇게 정확히 자리에 단어를 표시해주면 원하는 곳에 원하는 단어를 넣어 str을 구성할 수 있습니다.

 

 

Python 문자열 연산자 .count

예를 들어 엄청나게 긴 문장에 "파이썬"이라는 단어가 몇 개 있는지 알고 싶을 땐 어떻게 해야 될까요?

str_a = "파이썬을 공부하자 파이선을 공부하면 좋다. 파이썬은 독학할 수 있다."
print(str_a.count("파이썬"))

count라는 연산자를 사용하면 됩니다. 다만 명심하셔야 될 것 count는 인자로 넣은 값과 정확히 일치하는 str만 찾아줍니다. 위에 예에서도 볼 수 있듯이 "파이썬" 많은 count 하는 것이기에 결과가 2라고 나올 겁니다 "파이선"은 무시됩니다.

 

 

Python 문자열 연산자 len()

len()는 str의 총 숫자를 알기 위해서 씁니다.

str_a = "파이썬을 공부하자"
print(len(str_a))

9라고 나왔을 겁니다. 여기서 의문이 생기시는 분들도 있으실 겁니다. 파이썬은 순서를 0부터 센다고 했는데 왜 8이 아니고 9일까요? 순서와 수는 다른 것이기 때문입니다. len()는 인자의 수를 세는 기능입니다. 순서와 혼동하시면 안 됩니다.

반응형

댓글