문자열(String)은 Python에서 가장 기본적인 데이터 타입 중 하나입니다. Python 문자열은 알파벳, 숫자, 특수 문자 등으로 구성된 임의 개수의 문자 조합을 의미합니다. 이 튜토리얼에서는 다양한 상황에서 활용할 수 있도록 문자열을 생성하고, 조작하고, 포매팅하는 방법을 단계별로 살펴보겠습니다.
Python에서 새로운 문자열 만들기
Python에서 새로운 문자열을 만드는 방법은 매우 간단합니다. 작은따옴표(') 또는 큰따옴표(")로 문자 시퀀스를 감싸기만 하면 됩니다. 여러 줄에 걸친 긴 문자열은 삼중 따옴표(''' 또는 """)를 사용해 선언할 수 있습니다.
double_quotes = "My name is John!"
single_quotes = 'My name is John!'
multi_line_string = '''1. My name is John!
2. I am a programmer'''
문자열 인덱싱
Python 문자열의 모든 문자에는 정수 인덱스가 부여됩니다. 인덱스는 첫 번째 문자를 0으로 시작하여 문자열을 따라 순차적으로 증가합니다. 아래 예시처럼 개별 문자의 인덱스를 사용해 해당 문자를 가져올 수 있습니다.
myPet = "Dog not a cat"
myPet[0] # 'D'
myPet[5] # 'o'
myPet[7] # ' '
myPet[12] # 't'
# myPet[15] # IndexError 발생
마지막 문자의 인덱스를 벗어난 위치에 접근하려고 하면 IndexError가 발생합니다.
음수 인덱스를 사용하면 문자열의 뒤쪽부터 접근할 수도 있습니다. 이 경우 마지막 문자가 -1이 되며, 앞쪽으로 거슬러 올라갈수록 값이 음수 방향으로 증가합니다.
myPet = "Dog not a cat"
myPet[-1] # 't'
myPet[-6] # ' '
myPet[-8] # 'o'
myPet[-13] # 'D'
문자열 슬라이싱
슬라이싱(Slicing)은 문자열에서 부분 문자열(substring)을 추출하는 방법입니다. 이 기능은 문자열 인덱싱을 기반으로 동작합니다.
myPet = "Dog not a cat"
myPet[5:7] # 'ot'
myPet[1:12] # 'og not a ca'
위 코드처럼 콜론(:)으로 구분된 두 개의 인덱스를 지정하며, 첫 번째 인덱스는 슬라이싱 시작 위치, 두 번째 인덱스는 종료 위치를 나타냅니다. 결과로 얻어지는 부분 문자열은 시작 인덱스의 문자부터 종료 인덱스 바로 앞 문자까지 포함하며, 종료 인덱스에 해당하는 문자는 결과에 포함되지 않습니다.
시작 인덱스를 생략하면 문자열의 첫 문자부터 슬라이싱이 시작되고, 종료 인덱스를 생략하면 마지막 문자까지(포함) 슬라이싱이 진행됩니다.
myPet = "Dog not a cat"
myPet[:7] # 'Dog not'
myPet[10:] # 'cat'
myPet[:] # 'Dog not a cat' (전체 복사)
슬라이싱 인덱스에 음수 값을 사용하는 것도 가능합니다.
myPet = "Dog not a cat"
myPet[10:-1] # 'ca'
문자열 길이 구하기
Python 내장 함수인 len()을 사용하면 문자열의 길이를 구할 수 있습니다.
myPet = "Dog not a cat"
len(myPet) # 13
문자열 순회하기
for 반복문을 사용하면 문자열의 각 문자를 하나씩 순회(iterate)할 수 있습니다.
예시:
name = "John"
for char in name:
print(char)
# J, o, h, n 출력
문자열 연결(Concatenation)
문자열 연결이란 두 개 이상의 문자열을 합쳐 하나의 문자열로 만드는 것을 말합니다. Python에서는 여러 가지 방법으로 문자열을 연결할 수 있습니다.
첫 번째 방법은 + 연산자를 사용하는 것입니다.
str1 = 'Hello'
str2 = 'World'
concat_str = str1 + str2 # 'HelloWorld'
concat_str = str1 + ' ' + str2 # 'Hello World'
* 연산자를 사용하면 문자열을 원하는 횟수만큼 반복 연결할 수 있습니다.
concat_str = str1 * 3 # 'HelloHelloHello'
또 다른 방법은 join() 메서드를 사용하는 것입니다.
내장 메서드 join()은 공통 구분자(separator)를 기준으로 문자열 리스트를 하나의 문자열로 합칠 때 사용합니다.
arr = [str1, str2]
concat_str = (' ').join(arr) # 'Hello World'
concat_str = (',').join(arr) # 'Hello,World'
위 코드에서 첫 번째 join() 메서드는 리스트의 단어 사이에 공백을 삽입하고, 두 번째 join() 메서드는 단어 사이에 콤마(,)를 삽입합니다.
문자열과 정수 연결하기
Python에서는 문자열과 정수를 연결할 수 있지만, + 연산자만으로는 불가능합니다. 다음과 같은 코드를 실행하면:
name = "John"
age = 35
print(name + age)
아래와 같은 오류가 발생합니다:
Traceback (most recent call last):
File "concat.py", line 3, in <module>
print(name + age)
TypeError: can only concatenate str (not "int") to str
참고: + 연산자로는 문자열과 정수를 직접 연결할 수 없습니다.
이 오류를 피하려면 str() 함수를 사용해 정수를 문자열로 변환한 후 연결해야 합니다.
name = "John"
age = 35
print(name + str(age)) # John 35
문자열 분리(Split)하기
내장 메서드 split()은 하나의 문자열을 문자열 배열(리스트)로 분리할 때 사용합니다.
string = "My name is John"
split_arr = string.split(' ') # ['My', 'name', 'is', 'John']
# 구분자를 지정해서 분리할 수도 있습니다.
string = "John, Rose, Jack, Mary"
split_arr = string.split(', ') # ['John', 'Rose', 'Jack', 'Mary']
Strip - 공백 제거하기
내장 문자열 메서드 strip()은 문자열의 시작 부분과 끝 부분에 있는 공백을 제거합니다.
string = " Hello, World "
stripped_str = string.strip() # 'Hello, World'
결과에서 확인할 수 있듯이, strip()은 문자열 양 끝의 공백만 제거할 뿐 문자들 사이에 있는 공백은 그대로 유지합니다.
strip() 메서드에는 좌측 Strip과 우측 Strip이라는 두 가지 변형이 있습니다:
lstrip(): 문자열 왼쪽의 공백만 제거rstrip(): 문자열 오른쪽의 공백만 제거
예시:
lstrip_str = string.lstrip() # 'Hello, World '
rstrip_str = string.rstrip() # ' Hello, World'
Strip 계열 메서드는 사용자 입력을 처리할 때 특히 유용합니다. 사용자가 의도치 않게 추가 공백을 입력하는 경우가 많기 때문입니다.
문자열 포매팅
Python의 format() 메서드는 문자열을 포매팅할 때 사용합니다. 포매팅 대상 문자열 안에 중괄호 {}를 배치하면, 이 자리가 format() 메서드에 전달된 인수로 치환됩니다.
예시:
"Hello, {}".format('John') # 'Hello, John'
위 예시에서 {}는 포매팅된 문자열에서 'John'으로 대체됩니다.
문자열 안에 중괄호를 여러 개 사용할 수도 있습니다. 중괄호 안에 위치 인덱스를 명시하지 않으면 전달된 순서대로, 인덱스를 명시하면 지정된 위치 순서대로 치환됩니다.
예시:
"I have a {}, {}, and a {}".format('dog', 'cat', 'rabbit')
# 'I have a dog, cat, and a rabbit'
"I have a {1}, {0}, and a {2}".format('dog', 'cat', 'rabbit')
# 'I have a cat, dog, and a rabbit'
인덱스 대신 키워드 인수(keyword argument)를 사용하면 중괄호 안에 키워드 이름을 넣어 더 읽기 쉬운 코드를 작성할 수 있습니다.
예시:
print("{friend} is my friend and {enemy} is my enemy".format(friend="John", enemy="Jack"))
# 'John is my friend and Jack is my enemy'
format() 메서드는 매우 유연해서 다양한 용도로 활용할 수 있습니다.
다음은 format() 메서드의 몇 가지 추가 활용 예시입니다:
arr = [3, 5]
'I have {0[0]} dogs and {0[1]} cats'.format(arr)
# 'I have 3 dogs and 5 cats'
# 숫자를 다른 진법으로 변환
"int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)
# 'int: 42; hex: 2a; oct: 52; bin: 101010'
문자열을 소문자로 변환하기
Python의 lower() 메서드를 사용하면 문자열을 모두 소문자로 변환할 수 있습니다.
예시:
string = "Hello, World!"
string.lower() # 'hello, world!'
문자열을 대문자로 변환하기
마찬가지로 upper() 메서드를 사용하면 문자열을 모두 대문자로 변환할 수 있습니다.
예시:
string = "Hello, World!"
string.upper() # 'HELLO, WORLD!'
마무리
이 튜토리얼을 통해 Python 문자열의 기본 개념과 다양한 문자열 조작 메서드의 사용법을 익히셨기를 바랍니다. 인덱싱, 슬라이싱, 연결, 분리, 포매팅 등 소개된 기능들을 직접 실습해 보면 실무에서 훨씬 능숙하게 활용할 수 있을 것입니다.
참고 자료: Python 공식 문자열 문서(Python String Documentation)