본문 바로가기
Python

[Python] 파이썬 문자열 다루기

by A6K 2022. 11. 10.

파이썬에서 문자열을 다루는 방법들을 총 정리해보자.

파이썬 문자열

문자열이란 문자들의 나열이다. 파이썬에서는 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(리스트) 형태로 사용되어 리스트의 문자열 엘리먼트들을 구분자로 연결해서 문자열을 만들어준다.


 

 

파이썬 스크립트 작성에 도움되는 글 모음

파이썬으로 프로그램을 작성할 때 도움되는 글들을 모아본다. 개발환경 [Python] macOS에 파이참 설치 [Python] 파이참 깃허브 연동 [Python] 파이썬 PIP란? [Python] VSCode를 이용한 개발환경 [Python] python3를

hbase.tistory.com

 

댓글