문자열 자료형은 우리가 알고 있는 문자들을 열거한 자료형이다.

#

1. 문자열 표현방식


1)  큰 따음표(" ")로 둘러싸기

str = "Hello, world 1"
print(str)

 

2) 작은 따음표(' ')로 둘러싸기

str = 'Hello, world 2'
print(str)

 

3) 큰 따음표 연속 3개(""" """)로 둘러싸기

str = """Hello, world 3"""
print(str)

 

4) 작은 따음표 연속 3개(''' ''')로 둘러싸기

str = '''Hello, world 4'''
print(str)

 

문법적 간결함이 자랑인 파이썬이 문자열을 표현하는 방법을 4개나 가지고 있는 이유가 있다.

 

  • 문자열 내부에 큰 따음표 혹은 작은 따음표를 포함시키고 싶을 때
pyfun = "Python's funny!"
print(pyfun)

큰 따음표 안에 있는 작은 따음표는 문자열기호로 인식되지 않고 하나의 문자로 인식이 된다.

pyfun = 'he said "Oh, Python is very funny!"' 
print(pyfun)

작은 따움표 안에 있는 큰 따움표는 문자열기호로 인식되지 않고 하나의 문자로 인식이 된다.

한 번 큰 따움표 안에 큰따움표, 작은따움표 안에 작은 따움표를 넣고 실행해 보면 Syntax Error가 발생할 것이다. 확인해보기 바란다.

위의 방법 말고도 이스케이프 코드(escape code)를 사용하면 큰 따움표 안에 큰 따움표, 작은 다움표 안에 작은 따움표를 사용할 수 있다.

pyfun = 'Python\'s funny!'
print(pyfun)

\뒤에 오는 작은따움표 '는 문자열기호가 아닌 하나의 문자 자체로 인식이 된다.

 

pyfun = "he said \"Oh, Python is very funny!\""
print(pyfun)

\뒤에 오는 큰 따움표 "는 문자열기호가 아닌 하나의 문자 자체로 인식이 된다.

 

  • 여러 줄로 된 문장을 변수에 저장하고 싶을 때
pyfun = """
Life is too short
You need Python
"""
print(pyfun)

큰 따움표 세 개를 사용하면 여러줄의 문자열을 변수에 저장할 수 있다.

pyfun = '''
Life is too short
You need Python
'''
print(pyfun)

작은 따움표 세 개를 사용하면 여러줄의 문자열을 변수에 저장할 수 있다.

 

사실 이스케이프 코드(escape code)를 사용해서 여러줄의 문자열을 표현할 수 있기도 하다.

pyfun = "Life is too short\n You need Python"
print(pyfun)

pyfun = 'Life is too short\n You need Python'
print(pyfun)

 

Q. 이스케이프 코드란?

\n 줄 바꿈
\t 탭 간격
\</strong> \를 하나의 문자로 인식
\' '를 하나의 문자로 인식
\" "를 하나의 문자로 인식
\r 캐리지 리턴(줄바꿈, 현재 커서 가장 앞으로 이동)
\f 캐리지 리턴(줄바꿈, 현재 커서 다음 줄로 이동)
\a 벨 소리(출력을 하면 컴퓨터에서 '삑!' 소리)
\b 백 스페이스
\000 널(NULL) 문자

굳이 외우기 보다는 활용 빈도가 높은 것들을 위주로 이후 코드를 공부하다보면 알아서 익숙해질 것이다.

 

 

#

2. 문자열 연산


 

파이썬은 다른 프로그래밍 언어와 다르게 문자열 간의 연산이 가능하다.

first = "Python"
second = " is fun"

 

1) 문자열 더하기(연결)

print(first + second) #두 문자열이 이어서 나오게 된다.

 

 

2) 문자열 곱하기

print(first*5) #문자열이 5번 연속으로 출력된다.

 

#

3. 문자열 인덱싱(indexing)


pyfun = "Life is too short, You need Python"

 

첫 번째 문자부터 변수 pyfun의 index 0, index 1, index 2, … 이다.

print(pyfun[0]) # python에서 숫자는 1이 아닌 0부터 시작한다.
print(pyfun[1])
print(pyfun[2])
print(pyfun[3])
print(pyfun[4]) # space bar ' ' 역시 하나의 문자이다.
print(pyfun[5])
print(pyfun[6])
print("\n")
print(pyfun[-1]) # 뒤에서 부터 index를 읽으려면 -를 붙인 음수를 사용하면 된다.
print(pyfun[-2])
print(pyfun[-3])

 

 

4. 문자열 슬라이싱(slicing)


print(pyfun[0:4]) # 'Life'
print(pyfun[5:7]) # 'is'
print(pyfun[9:12]) # 'too'

 

파이썬에서 가장 혼동하기 쉬운 부분이 문자열 슬라이싱에서 index이다. [a:b]는 a에서 b-1 까지이다. 슬라이싱에서 마지막 index는 포함하지 않는 것이다. 즉, pyfun[a:b]는 a <= pyfun < b 이다.

print(pyfun[19:]) # 'You need Python'  pyfun[시작:끝] 에서 끝을 비워두면 문자열의 마지막 index까지를 의미한다.
print(pyfun[:17]) # 'Life is too short'  pyfun[시작:끝] 에서 시작을 비워두면 문자열의 처음 index부터를 의미한다.

print(pyfun[19:-7]) # 'You need'  음수도 사용 가능하다. -8은 d 이다. 역시나 index -7은 포함되지 않는다는 것을 잊지 말자.

 

 

 

5. 문자열 포매팅(formatting)


man = "My age is %d" # %d 는 정수를 표현하는 포맷 코드이다.
print(man %3) # %d 에 3이 대입된다.
print(man %5) # %d 에 5가 대입된다.

man = "My age is %d and I live in %s" # %s 는 문자열을 표현하는 포맷 코드이다.
print(man %(10, 'Seoul')) # 문자열 포맷 코드가 2개인 문장에는 괄호와 쉼표를 사용하여 구분해주면 된다.

num = 20
home = 'Busan'
print(man%(num,home)) # 문자열 포맷 코드에는 숫자나 문자열 자체가 아닌 변수 형태로도 대입이 된다.

woman = "My age is %s"
print(woman %5) # 한 가지 Tip은 사실 %s 포맷 코드는 % 뒤에 있는 자료형을 모두 문자열로 변환시키기 때문에 어떤 자료형이든 대입이 된다.

 

문자열 포매팅은 상황에 따라 특정 정보가 달라져야 하는 코드를 작성할 경우에 사용한다.

Q. 문자열 포맷 코드란?

%s 문자열
%c 문자
%d 정수
%f 실수
%0 8진수
%x 16진수
%% '%' (% 문자 자체)

 

문자열 내부에 포맷 코드가 있을 경우 기호 %를 나타내기 위해서는 무조건 %% 로 2개를 사용해야 한다.

sale = "The ratio is %d%%"
print(sale %50) # The ratio is 50% 라는 문자열이 출력된다.

sale = "The ratio is 50%"
print(sale) # 물론 문자열 안에 전혀 포맷 코드가 없는 경우에는 %기호 하나로 %캐릭터 자체가 출력된다.

 

# 숫자가 포함된 포맷코드

say = "she answered%10s" # %10s는 문자열 저장을 위해 총 10칸의 문자열 길이를 할당하고 오른쪽 정렬을 한다.
print(say %'yes') # 'she answered       yes' 를 출력한다. 총 10개의 문자열에서 3개의 yes가 오른쪽 정렬되어 왼쪽에 7개의 공백이 생긴다.

say = "%-10ssaid yes" # 문자열 칸을 총 10개 할당하고 왼쪽 정렬 하였으므로 오른쪽에 8개의 공백이 생긴다.
print(say %'he') # 'he        said yes'

pi_1 = "pi is %0.2f" # 소수점 아래 2자리까지 표현
pi_2 = "pi is %0.4f" # 소수점 아래 4자리까지 표현
print(pi_1 %3.141592) # 'pi is 3.14'
print(pi_2 %3.141592) # 'pi is 3.1416' (3.1415가 아닌 이유는 소수점아래 5 번째 자리에서 반올림 되어서 그렇다.)

pi_3 = "pi is%10.2f" #10칸의 문자열에서 오른쪽 정렬하여 숫자를 소수점 아래 2 자리까지 표현
print(pi_3 %3.141592) # 'pi is      3.14' 10칸의 문자열에서 3,.,1,4 총 4개의 문자열이 오른쪽 정렬되어 왼쪽에 6칸의 공백 형성

#

 

6. 문자열 관련함수


py = "Python is funny"

 

1) 문자 갯수 세기

print(py.count('n'))

 

 

2) 위치 반환1

print(py.find('n')) # n이 처음 나온 index인 5 반환
print(py.find('z')) # 찾는 문자가 없으면 -1 반환

 

 

3) 위치 반환2

print(py.index('n')) # n이 처음 나온 index인 5 반환
#print(py.index('z')) # 찾는 문자가 없으면 오류 발생 ## 오류 때문에 뒤의 코드 실행 안되어 주석 처리

 

 

4) 문자열 삽입

a = py.join('123') # 각각의 문자열 사이에 py("Python is funny") 를 삽입
print(a) #'1Python is funny2Python is funny3'

 

 

5) 대문자로 변환

print(py.upper()) # 모든 문자를 대문자로 변환

 

 

6) 소문자로 변환

print(py.lower()) # 모든 문자를 소문자로 변환
py2 = "   Python is funny      "

 

7) 왼쪽 공백 삭제

print(py2.lstrip()) # 문자열 가장 왼쪽의 모든 공백 삭제

 

 

8) 오른쪽 공백 삭제

print(py2.rstrip()) # 문자열 가장 오른쪽의 모든 공백 삭제

 

 

9) 양쪽 공백 삭제

print(py2.strip()) # 문자열 가장 왼쪽, 오른쪽의 모든 공백 삭제

 

 

10) 문자열 바꾸기

print(py.replace("funny","GaeNoJam")) # ("바뀔 문자열", "대체할 문자열")  'funny'를 'GaeNoJam' 으로 변환

 

 

11) 문자열 나누기

print(py.split()) # 공백(space bar, tab, enter)을 기준으로 문자열을 나눈다. ['Python', 'is', 'funny']
print(py.split('is')) # 'is' 를 기준으로 문자열을 나눈다. ['Python ', ' funny'] Python 뒤 공백 1칸, funny 앞 공백 1칸은 물론 포함된다.

위와 같이 문자열을 나누면 각각의 요소가 리스트(list)로 들어가게 된다. 리스트는 다음 시간에 공부한다.
위에서 소개한 문자열 관련 함수들은 사용 빈도나 꽤나 높기때문에 숙지해두면 도움이 된다.

 

#

Bonus) 문자열 포맷 함수


man = "My name is {0} and age is {1}. I live in {2}"

문자열 포맷함수로 지정할 항목들을 {0}, {1}, {2}, … 와 같이 indexing 해준다.

print(man.format('John', 20, 'Seoul')) # .format() 함수를 사용하여 index 항목에 값 저장

name = 'John'
age = 20
home = 'Seoul'
print(man.format(name,age,home)) # 값을 직접 입력하는 대신 변수로도 대입이 가능하다.

print("hello, my name is {name} and age is {age} and I live in {home}".format(name = 'John', age=20, home= 'Seoul'))

{0}, {1}, … 형태의 index 대신 {name} 형태로 사용할 수도 있다. 이 경우에는 반드시 name=value 처럼 값을 지정해주어야한다.

 

print("{name:>10}".format(name = "John")) # :>10 은 문자열의 크기를 10으로 지정하고 오른쪽 정렬 시키라는 의미이다. 10칸의 {name}에 'John'이 오른쪽 정렬된다.
print("{name:^20}".format(name = "John")) # ^20은 문자열의 크기를 20으로 지정하고 가운데 정렬 시키라는 의미이다. 20칸의 {name}에 'John'이 가운데 정렬된다.
print("{name:=^20}".format(name= "John")) # =^20은 문자열의 크기를 20으로 지정하고 가운데 정렬 시키는데, 공백을 '='로 채운다.
print("{name:@^20}".format(name = "John")) # @^20은 문자열의 크기를 20으로 지정하고 가운데 정렬 시키는데, 공백을 '@'로 채운다.

정렬 시 공백을 지정한 문자로 채워주려면 정렬 문자인 <,>,^ 앞에 채워넣을 문자를 넣어주면 된다.

print("my age is {age:0.4f}".format(age = 3.141592)) # :0.4f는 age를 소수점 아래 4 자리까지만 지정한다.
print("{{hello}}".format()) # format 함수를 사용하면서 괄호 {, } 를 포매팅 문자가 아닌 문자 자체로 나타내고 싶은 경우 1개가 아닌 2개를 사용한다.

format 함수를 사용하면서 괄호 {, } 를 포매팅 문자가 아닌 문자 자체로 나타내고 싶은 경우 1개가 아닌 2개를 사용한다.

+ Recent posts