3.2. 문자열#

우리가 평소에 접하는 모든 정보는 대부분 문자들이다. 책을 읽거나 대화를 하거나, 모든 일상에서 우리가 보고, 듣고, 말하는 정보는 대부분 문자로 구성된다.

파이썬에서 문자를 저장하는 형식은 문자열(str) 이라고 부른다. 문자열은 문자들의 조합이다.

3.2.1. 문자열의 표현식#

문자열의 정의는 아래와 같이 ‘ ‘ 와 ” ” 로 모두 정의할 수 있다. 예를 들면 "apple"'apple' 은 똑같이 문자열을 정의한다.

name_1 = '철수'
name_1
'철수'
type(name_1)
str
thing_1 = "apple"
thing_1
'apple'
action_1 = "eat"
action_1
'eat'
action_2 = 'buy'
action_2
'buy'

문자열로 정의된 변수(이름)을 더하기 + 연산자로 조합하여 여러 개의 문자열을 연결할 수 있다.

name_1 + action_1 + thing_1
'철수eatapple'
name_1 + ' ' + action_1 + 's ' + thing_1
'철수 eats apple'

곱하기 * 연산자를 이용하면 문자열을 반복할 수 있다.

name_1*3
'철수철수철수'

앞에서 문자열이 보여질 때 작은 따옴표 '...' 로 묶어진 내용이 나타난다. 작은 따옴표 '는 문자열이라는 사실을 나타내는 것으로 실제로 문자열의 내용만 보여줄 경우 print() 를 사용한다. print() 는 함수(function)라고 부르며 괄호 안에 주어진 문자열이나 변수의 내용을 출력하는 기능을 가진다.

print(name_1 + ' ' + action_1 + 's ' + thing_1)
철수 eats apple

문자열 안에 작은 따옴표 ' 가 있는 경우 큰 따옴표 " 로 정의하면 문제가 없지만 작은 따옴표로 정의하는 경우 문자열의 시작과 끝이 구별이 되지 않기 때문에 역슬래쉬 \ 로 아래와 같이 보호해준다.

text_1 = "I can't go"
text_1
"I can't go"
text_2 ='you can\'t come'
text_2
"you can't come"

물론 큰 따옴표가 문자열에 있는 경우도 역슬래쉬 \ 로 보호해주어야 한다.

text_3 = "He said \"yes\""
text_3
'He said "yes"'

주의할 점은 역슬래쉬 \로 시작하는 특별한 문자열은 특수한 기능을 가진다. 이러한 특수한 기능을 가진 특수 문자열(escape sequence)라고 부른다.

예를 들어 문자열 안에 \n 이 나타나면 줄을 바꾸는 기능(newline)한다. 따라서 다음과 같이 컴퓨터의 디렉토리를 지정하는 문자열은 \n 때문에 출력하면 다음 줄로 넘어가게 된다.

"첫 번째 줄 \n두 번째 줄"
'첫 번째 줄 \n두 번째 줄'
print("첫 번째 줄 \n두 번째 줄")
첫 번째 줄 
두 번째 줄

특수 문자열이 주어진 기능을 하지 못하게 하는 방법은 문자열을 정의할 때 r 로 시작하면 된다.

text_4 = r'C:\some\name'
print(text_4)
C:\some\name

문자열도 숫자와 마찬가지로 비교 연산자를 적용하여 순서를 비교할 수 있습니다.

'A' < 'B'
True
'김철수' > '이영희'
False
'Apple' < 'apple' # 대문자가 소문자보다 순서가 앞이다.
True

3.2.2. 부분 문자열과 메소드#

문자열을 다루다 보면 주어진 문자열을 이용하여 다른 문자열을 만들어야 하는 경우가 있다.

예를 들어, 성과 이름이 같이 있는 문자열에서 성과 이름만 포함한 문자열을 새로 만들어 보자. 다음과 같이 전체 문자열에서 원하는 문자열의 위치를 지정해 주면 문자열의 일부분만 추출할 수 있다.

str[start:end]

이 경우 주의해야할 점은 다음과 같다.

  • 파이썬에서는 시작의 위치가 0 이다.

  • start 는 문자의 순서에서 시작 위치를 나타낸다.

  • end는 문자의 순서에서 끝나는 위치가 end-1 이라는 의미이다..

  • 시작과 끝의 위치가 정해지면 : 으로 묶고 [] 안에 넣어서 문자열 뒤에 붙여준다.

아래 예에서 문자열 이철수 에서 첫 번째 문자를 지정하는 형식은 문자열 이름 뒤에 [0]을 붙인다.

이름을 나타내는 철수 문자열은 위치를 지정할 때 start 은 1, end은 3 으로 지정해야 한다.즉 문자열 뒤에 [1:3] 을 붙여준다.

name_3 = '이철수'
name_3[0]
'이'
name_3[1:3] 
'철수'
name_4 = 'John Smith'
name_4[0:4]
'John'
name_4[5:10]
'Smith'

문자열을 다루는 경우 문자열 안에 있는 특정한 문자를 다른 문자로 대치할 경우가 있다. 이 경우 사용하는 방법이 문자열의 replace 메소드이다.

메소드(method)는 특정한 형식을 가진 자료에 적용되는 기능을 의미한다. 메소드는 변수명 뒤에 따옴표 . 를 붙이고 특정한 이름 또는 함수를 붙여서 사용한다.

아래 표현식은 문자열에 있는 iswas 로 바꾸어 준다.

text_5 = 'There is a desk'
text_5
'There is a desk'
text_5.replace('is', 'was')
'There was a desk'

이와 같이 메소드는 데이터에 특정한 작업을 적용하거나 성질을 보여주는 역활을 하며 기본적으로 제이터의 내용은 바꾸지 않는다.

text_5
'There is a desk'

메소드를 적용해서 데이터의 내용을 바꾸고 저장하려면 다른 변수로 저장해야 한다.

text_6 = text_5.replace('is', 'was')
text_6
'There was a desk'

이제 문자열에 적용할 수 있는 다양한 메소드들 중에 유용한 몇 가지 메소드을 배워보자.

text_5.upper() # 문자열을 모두 대문자로 
'THERE IS A DESK'
text_5.count('e') # 괄호안에 주어진 문자열이 몇 번 나타나는지 
3
text_5.split(sep=' ')  # sep= 으로 지정된 문자열을 사용하여 분자열을 나누어서 리스트로 저장
['There', 'is', 'a', 'desk']