우리가 자료형을 배울 때 문자열, 즉 str에 대해 간략하게 설명을 한 적이 있었습니다. 문자열과 같은 경우, 문자로 구성된 집합을 의미했었죠. 때문에 컨테이너 자료형처럼 인덱싱이나 슬라이싱을 사용할 수 있었습니다. 이번 시간에는 문자열에 대해 자세히 살펴보는 시간을 가지겠습니다.
파이썬에서 문자열은 클래스인만큼, 다양한 메소드를 가지고 있습니다. 기능별로 나눠보자면 다음과 같습니다.
메소드 | 기능 |
---|---|
index(arg) | arg가 문자열 내 몇 번째 인덱스인지 반환 (없으면 에러) |
find(arg) | arg가 문자열 내 몇 번째 인덱스인지 반환 (없으면 -1 반환) |
startswith(arg) | 문자열이 arg로 시작하는지 여부(True/False) |
endswith(arg) | 문자열이 arg로 끝나는지 여부(True/False) |
s = "i love Python"
print(s.index('l'))
print(s.find('z'))
print(s.startwith('i'))
print(s.endswith('o'))
# 결과
# 2
# -1
# True
# False
메소드 | 기능 |
---|---|
upper() | 문자열을 대문자로 바꿈 |
lower() | 문자열을 소문자로 바꿈 |
capitalize() | 문자열의 첫 글자만 대문자로, 나머지는 소문자로 바꿈 |
isupper() | 문자열을 모두 대문자면 True, 아니면 False 반환 |
islower() | 문자열을 모두 소문자면 True, 아니면 False 반환 |
s = "python"
print(s.upper())
print(s.lower())
print(s.capitalize())
print(s.isupper())
print(s.islower())
# 결과
# PYTHON
# python
# Python
# False
# True
메소드 | 기능 |
---|---|
strip() | 문자열의 양쪽 공백을 제거 |
lstrip() | 문자열의 왼쪽 공백을 제거 |
rstrip() | 문자열의 오른쪽 공백을 제거 |
s = " hi "
ls = " hi"
rs = "hi "
print(s.strip())
print(s.lstrip())
print(s.rstrip())
# 결과
# hi
# hi
# hi
메소드 | 기능 |
---|---|
replace(old, new) | 문자열 내 old부분을 new로 바꿈 |
s = "hello world!"
s2 = s.replace("world", "python")
print(s2)
# 결과
# hello python!
메소드 | 기능 |
---|---|
split(sep) | sep을 구분자로 문자열을 잘라 리스트로 반환 |
sep.join(arg) | 리스트나 문자열을 받아 sep을 구분자로 넣은 문자열로 반환 |
s = "hello my name is kim"
lst = s.split() # sep은 공백(' ')이 기본값으로 설정되어 있습니다.
print(lst)
new_s = ''.join(lst) # ''을 구분자로 lst의 원소들을 하나의 문자열로 반환
print(new_s)
# 결과
# ["hello", "my", "name", "is", "kim"]
# hellomynameiskim
우리가 문자열을 출력할 때, 경우에 따라 문자열의 일부 값을 바꿔야할 때가 있습니다. 예를 들어 'ooo학생 출석했습니다.'와 같은 문자열을 출력해야 한다고 하면, 학생 이름에 따라 문자열이 달라져야 하죠. 하지만 이를 위해서 학생 명수별로 문자열을 일일히 적는 건 비효율적입니다.
때문에 파이썬에서는 문자열 포매팅을 통해 문자열 중 원하는 위치에 특정 변수나 값이 오게 하여 효율적인 문자열 사용을 가능하게 합니다.
문자열 포매팅에는 대표적으로 세 가지 방법이 있습니다. 하나씩 살펴보겠습니다.
% 연산자를 활용한 문자열 포매팅은 "%자료형" % 들어갈 값
의 형태를 띠고 있습니다.
people = 10
seed = 5
print("%d명에게 %d개의 씨를 주세요." % (people, seed)) # %d는 정수를 나타냅니다
위의 코드를 보면, 정수를 나타내는 %d를 적고 그에 맞는 자료형 변수인 seed를 주고 있습니다.
자료형 | 표현 |
---|---|
정수 | %d |
8진수 | %o |
16수 | %x |
실수 | %f |
문자열 | %s |
만약, 지정된 자료형과 다른 자료형을 넣는다면 어떻게 될까요?
print("%d" % 1.1) # 1이 출력된다.
print("%d" % "hello")
# TypeError: %d format: a real number is required, not str
우리가 자료형 변환에서 본 것처럼 변환이 가능한 경우에는 변환한 결과가 출력되지만, 위의 코드에서처럼 문자열을 정수로 변환하는 것과 같은 경우에는 오류가 발생합니다.
% 연산자를 활용한 문자열 포매팅은 포매팅할 문자가 많이지면 다소 복잡해진다는 단점을 가지고 있습니다. 때문에 파이썬에서는 format 메소드를 제공하여 편리한 문자열 포맷팅을 제공합니다.
문자열 포매팅은 다음과 같은 형태로 이루어집니다.
people = 10
seed = 5
print("{}명에게 {}개의 씨를 주세요.".format(people, seed))
중괄호를 문자열 내에 삽입한 후, format 메소드로 중괄호 안에 들어갈 변수나 값을 지정합니다. 이때, 괄호 안에 이름이나 숫자를 적어 어떤 변수가 어느 위치에 들어갈 지 정할 수도 있습니다.
# 이름으로 정함
print("{n}명에게 {count}개의 씨를 주세요.".format(n=10, count=5))
# 결과: 10명에게 5개의 씨를 주세요.
# 숫자로 정함
print("{1}명에게 {0}개의 씨를 주세요.".format(5, 10))
# 결과: 10명에게 5개의 씨를 주세요.
f-string은 format 메소드보다 더 문자열 포매팅을 편리하게 사용할 수 있는 방법입니다. f-string은 문자열 앞에 f를 붙이고 중괄호 안에 사용할 변수를 넣는 방식으로 이루어집니다.
people = 10
seed = 5
print(f"{people}명에게 {seed}개의 씨를 주세요.")
기존의 format 메소드와 달리 사용할 변수를 중괄호 안에 직접 넣기 때문에 코드를 더 간결하게 작성할 수 있다는 장점을 가지고 있습니다.
문자열을 사용하다보면 줄바꿈이나 탭을 포함하여 작성하고 싶을 때가 있습니다. 하지만 일일이 줄을 바꾸고 탭을 입력하면 문자열이 복잡해지죠. 때문에 파이썬에서는 이스케이프 문자를 제공하여 특수한 문자들을 적을 수 있게 합니다.
이스케이프 문자는 백슬래시(\
)와 함께 사용합니다.
기호 | 의미 |
---|---|
\n | 줄 바꿈 |
\t | 탭 |
\b | 백스페이스 |
\ | 백슬래시 |
\' | 작은 따옴표 |
\" | 큰 따옴표 |
코드로 살펴보면 다음과 같습니다.
print("\'그리고 아무도 없었다.\'라는 책이 있나요?\n네, 800번대에 있습니다.")
# 결과
# '그리고 아무도 없었다.'라는 책이 있나요?
# 네, 800번대에 있습니다.