파이썬에서 문자열을 다루는 방법들을 총 정리해보자.
파이썬 문자열
문자열이란 문자들의 나열이다. 파이썬에서는 4가지 방법으로 문자열을 생성할 수 있다.
str1 = 'string1'
str2 = "string2"
str3 = '''string3
with
multiple
lines
'''
str4 = """string4
with
multiple
lines
"""
파이썬에서는 작은 따옴표와 큰 따옴표 한개 혹은 작은 따옴표와 큰 따옴표 세개로 문자열을 표현할 수 있다. 문자열을 만들 수 있는 방법이 여러개가 지원되는 이유는 편의성 때문이다. 예를 들어 "I'm Dave"처럼 문자열 안쪽에 작은 따옴표가 들어가는 경우 큰 따옴표로 문자열을 만들어 작은 따옴표 문자를 별도로 이스케이프 처리하지 않아도 된다.
이스케이프 코드
문자열 내부에서 특수하게 사용되는 문자들이 있다. 이를 이스케이프 코드라고 한다.
이스케이프 코드 | 설명 |
\\ | 역슬래시 문자를 표현 |
\' | 작은 따옴표 문자 자체를 표현 |
\" | 큰 따옴표 문자 자체를 표현 |
\n | 줄 바꿈 |
\t | 탭 문자 |
파이썬의 문자열에서 역슬래시 문자와 작은 따옴표, 큰 따옴표는 특수한 목적으로 사용된다. 따라서 작은 따옴표, 큰 따옴표, 역슬래시 문자 자체를 사용하기 위해서는 이스케이프 처리를 해서 특수목적이 아는 그 문자를 사용하기 위함이라고 표시해야한다.
예를 들어 다음과 같이 이스케이프 코드를 문자열에서 사용할 수 있다.
str1 = '역슬래시 \\ 문자'
print(str1)
str2 = '작은 따옴표 \' 문자'
print(str2)
str3 = '큰 따옴표 \" 문자'
print(str3)
str4 = '줄 바꿈 \n 문자'
print(str4)
str5 = '탭 \t 문자'
print(str5)
# 역슬래시 \ 문자
# 작은 따옴표 ' 문자
# 큰 따옴표 " 문자
# 줄 바꿈
# 문자
# 탭 문자
문자열 인덱싱
문자열은 문자들의 나열이다. 문자열의 인덱싱으로 문자열의 N 번째 글자에 접근할 수 있다. 리스트의 엘리먼트에 접근하는 것처럼 문자열[인덱스] 형태로 접근할 수 있다.
str = 'abcdefg'
print(str[-1])
print(str[-2])
print(str[-3])
# g
# f
# e
리스트와 마찬가지로 음수 인덱스로 접근할 수도 있다. 음수는 뒤에서부터 몇 번째인지를 나타낸다.
문자열의 길이를 넘는 인덱스로 접근하면 에러가 발생한다.
str = 'abcdefg'
print(str[11])
# Traceback (most recent call last):
# File "./test.py", line 5, in <module>
# print(str[11])
# IndexError: string index out of range
문자열 슬라이싱
리스트처럼 인덱스를 이용해서 문자열의 일부를 잘라낼 수도 있다. 문자열[시작 인덱스:종료 인덱스]를 통해서 시작인덱스 문자부터 종료인덱스 - 1 문자까지 잘라 낼 수 있다.
str = 'abcdefg'
print(str[1:4])
print(str[3:])
print(str[:3])
print(str[:])
# bcd
# defg
# abc
# abcdefg
str[1:4]는 1번 인덱스 문자부터 4번 인덱스 문자 직전까지를 잘라낸다. 즉 bcd 문자를 잘라낸다.
시작 인덱스와 종료 인덱스는 생략할 수도 있다. 시작 인덱스가 생략되면 처음부터라는 의미고 종료 인덱스가 생략되면 끝까지라는 의미다. 둘 다 생략되면 처음부터 끝까지라는 의미다.
문자열 길이
문자열의 길이를 구하기 위해서 파이썬의 내장함수인 len()을 사용하면 된다.
str = 'abcdefg'
print(len(str))
# 7
문자열 연결
파이썬에서 두 문자열을 연결하기 위해서 더하기 연산을 이용하면 된다.
str1 = 'abcd'
str2 = 'efg'
str3 = str1 + str2
print(str3)
# abcdefg
문자열 반복
특정 문자열이 반복되는 문자열을 만들기 위해서 곱하기 연산을 이용하면 된다.
str1 = 'abcd'
str2 = str1 * 3
print(str2)
# abcdabcdabcd
문자 세기 - count()
count() 메소드는 문자열 내부에 특정 문자가 등장하는 횟수를 알려준다.
str = 'this is sample string'
c1 = str.count('i')
c2 = str.count('i', 10)
c3 = str.count('i', 0, 10)
print(c1)
print(c2)
print(c3)
# 3
# 1
# 2
예를 들어 str.count('i')는 str 문자열에 'i'라는 문자가 등장하는 횟수를 세어준다.
count() 메소드는 추가로 인자를 더 받을 수 있다. 인자를 하나 더 받으면 문자를 찾을 시작 인덱스를 지정하게 되고, 인자를 하나 더 받으면 종료 인덱스를 지정하게 된다.
문자 찾기 - find(), rfind()
find()와 rfind() 메소드는 문자열 내부에서 특정 문자의 위치를 찾는 함수다. 특정 문자가 문자열의 몇 번째 인덱스에 위치해있는지 찾아준다.
str = 'this is sample string'
c1 = str.find('i')
c2 = str.find('i', 10)
c3 = str.find('i', 0, 10)
print(c1)
print(c2)
print(c3)
# 2
# 18
# 2
찾고자 하는 문자를 첫 번째 인자로 준다. 두 번째, 세 번째 인자는 선택값인데 찾고자 하는 범위의 시작 인덱스와 종료 인덱스를 의미한다.
찾고 싶은 문자가 문자열 내부에 없으면 -1을 리턴한다. 만약 찾고 싶은 문자가 문자열 내부에서 여러번 등장한다면, 맨 처음 위치가 리턴된다.
rfind() 메소드는 find() 메소드와 동일하게 문자열 내부에서 찾고자하는 문자가 어디에 위치해있는지 찾아준다. 다만 문자가 여러번 등장할 때, 가장 마지막에 등장한 위치를 리턴한다는 점이 다르다.
str = 'this is sample string'
c1 = str.rfind('i')
c2 = str.rfind('i', 10)
c3 = str.rfind('i', 0, 10)
print(c1)
print(c2)
print(c3)
# 18
# 18
# 2
문자열 대소문자
파이썬 문자열 메소드들 중에 대소문자와 관련된 메소드를 살펴보자.
대소문자 전환 - upper(), lower(), swapcase()
문자열을 대문자로 만들기 위해서는 upper() 메소드를 호출하면되고 소문자로 만들기 위해서는 lower() 메소드를 호출하면된다.
str = 'This is Sample String'
upper_str = str.upper()
lower_str = str.lower()
print(upper_str)
print(lower_str)
# THIS IS SAMPLE STRING
# this is sample string
swapcase() 메소드는 대문자는 소문자로 소문자는 대문자로 바꿔준다.
str = 'This is Sample String'
swap_case = str.swapcase()
print(swap_case)
# tHIS IS sAMPLE sTRING
첫 문자만 대문자로 - Capitalize()
capitalize() 메소드는 문자열의 첫 문자만 대문자로 변경하고 나머지 문자열은 모두 소문자로 변경한다.
str = 'This is Sample String'
capitalize_case = str.capitalize()
print(capitalize_case)
# This is sample string
단어들의 첫 글자를 대문자로 - title()
title() 메소드는 문자열의 각 단어의 앞 문자를 대문자로 바꿔주고 나머지는 소문자로 변경한다.
str = 'this is sample string'
title_str = str.title()
print(title_str)
# This Is Sample String
문자열 공백 제거 - strip(), rstrip(), lstrip()
strip(), rstrip(), lstrip() 메소드는 문자열의 공백을 제거한다. 문자열에 포함되어 있는 공백문자나 줄바꿈 문자 등을 제거해준다.
strip() 메소드는 좌우 모두 제거하고, rstrip()은 오른쪽 공백을 lstrip()은 왼쪽 공백을 제거한다.
str = ' this is sample string \n\n'
strip_str = str.strip()
lstrip_str = str.lstrip()
rstrip_str = str.rstrip()
print(strip_str)
print(lstrip_str)
print(rstrip_str)
# this is sample string
# this is sample string
#
#
# this is sample string
문자열 치환 - replace()
replace(old, new) 메소드는 문자열에 있는 문자 old를 new로 바꾸고, 변경된 문자열을 리턴하는 메소드다. replace(old, new, count) 형태로 사용할 경우 old에 해당하는 문자가 여러개 일 때 count 개수만큼만 old 문자를 new 문자로 바꿔준다.
str = 'this is sample string'
replace_str1 = str.replace('is', 'as')
replace_str2 = str.replace('is', 'as', 1)
print(replace_str1)
print(replace_str2)
# thas as sample string
# thas is sample string
문자열 쪼개기 - split()
split() 메소드는 특정 문자를 기준으로 문자열을 쪼갤 때 사용한다. split() 함수의 첫 번째 인자로 받은 문자를 기준으로 문자열을 쪼개서 문자열 리스트로 리턴해준다.
str = 'this is sample string'
split_str1 = str.split(' ')
split_str2 = str.split(' ', 1)
print(split_str1)
print(split_str2)
# ['this', 'is', 'sample', 'string']
# ['this', 'is sample string']
예를 들어 split(' ') 메소드를 실행하면 문자열을 공백 문자를 기준으로 나눠서 문자열의 리스트로 리턴해준다.
split() 메소드에 추가로 숫자 하나를 더 인자로 받을 수 있는데, 나누는 기준이 되는 문자가 여러번 등장할 경우 앞에서부터 최대 몇 번까지만 문자열 나눌 것인지를 의미한다.split(' ', 1) 메소드 호출의 의미는 공백 문자로 문자열을 나누되 한번만 나누겠다는 의미다.
문자열 리스트 합치기 - join()
split() 메소드와 반대 개념인 join() 메소드도 있다. join() 메소드는 인자로 문자열 리스트를 받는다. 이 문자열 리스트에 있는 문자열들을 하나로 합쳐준다.
str_list = ['this', 'is', 'sample', 'string']
str = ' '.join(str_list)
print(str)
# this is sample string
'구분자'.join(리스트) 형태로 사용되어 리스트의 문자열 엘리먼트들을 구분자로 연결해서 문자열을 만들어준다.
댓글