파이썬 문자열(String) 완벽 정리: 자르기, 합치기, 치환, 포맷팅 한 번에
파이썬 문자열 사용법을 한 곳에 모았습니다. 자르기(split·슬라이싱), 합치기(join), 치환(replace), f-string 포맷팅, 탐색, 숫자 변환까지. 모든 예제는 복사해서 바로 실행할 수 있습니다.
파이썬에서 문자열은 거의 모든 코드에 등장합니다. 그만큼 검색도 많죠. "파이썬 문자열 자르기", "문자열 합치기", "문자열 치환", "f-string 포맷팅"… 매번 비슷한 걸 찾게 됩니다.
이 글은 파이썬 문자열의 핵심 사용법을 한 곳에 모았습니다. 자르기·합치기·치환·탐색·포맷팅까지, 전부 복사해서 바로 쓸 수 있게 정리했습니다. 북마크해두고 필요할 때마다 꺼내 쓰세요.
동작 환경: Python 3.6+ (f-string은 3.6부터 사용 가능)
문자열 기본과 인덱싱
s = "hello"
len(s) # 5 — 길이
s[0] # 'h' — 첫 글자
s[-1] # 'o' — 마지막 글자
s[1:4] # 'ell' — 슬라이싱 (인덱스 1~3)
# 문자열은 수정 불가(immutable) — 글자 하나만 바꾸려면 새로 만들어야 함
s[0] = "H" # ❌ TypeError!
s = "H" + s[1:] # 'Hello' — 이렇게 새 문자열 생성
문자열이 **불변(immutable)**이라는 점이 핵심입니다. 모든 "수정" 메서드는 원본을 바꾸지 않고 새 문자열을 반환합니다.
문자열 자르기 (split, 슬라이싱)
가장 검색량이 높은 부분입니다.
s = "apple,banana,cherry"
# 구분자로 자르기
s.split(",") # ['apple', 'banana', 'cherry']
"a b c".split() # ['a', 'b', 'c'] (공백 기준, 기본값)
s.split(",", 1) # ['apple', 'banana,cherry'] (최대 1번만 분리)
# 슬라이싱으로 자르기
text = "2024-01-15"
text[:4] # '2024' — 연도
text[5:7] # '01' — 월
# 줄 단위로 자르기
"line1\nline2".splitlines() # ['line1', 'line2']
문자열 합치기 (join)
리스트를 하나의 문자열로 합칠 때는 join을 씁니다. +로 반복해서 잇는 것보다 훨씬 빠릅니다.
words = ["apple", "banana", "cherry"]
",".join(words) # 'apple,banana,cherry'
" ".join(words) # 'apple banana cherry'
"".join(words) # 'applebananacherry'
# 숫자 리스트는 문자열로 변환 후 합치기
nums = [1, 2, 3]
"-".join(map(str, nums)) # '1-2-3'
# 단순 연결
"hello" + " " + "world" # 'hello world'
"ab" * 3 # 'ababab' — 반복
문자열 치환 (replace)
s = "hello world"
s.replace("o", "0") # 'hell0 w0rld' — 모든 o를 0으로
s.replace("o", "0", 1) # 'hell0 world' — 첫 번째만 치환
s.replace(" ", "") # 'helloworld' — 공백 제거
# 여러 문자를 한 번에 치환 (translate)
table = str.maketrans("abc", "xyz")
"aabbcc".translate(table) # 'xxyyzz'
대소문자 변환
s = "Hello World"
s.upper() # 'HELLO WORLD'
s.lower() # 'hello world'
s.title() # 'Hello World' — 각 단어 첫 글자 대문자
s.capitalize() # 'Hello world' — 첫 글자만 대문자
s.swapcase() # 'hELLO wORLD' — 대소문자 반전
공백 / 특정 문자 제거 (strip)
s = " hello "
s.strip() # 'hello' — 양쪽 공백 제거
s.lstrip() # 'hello ' — 왼쪽만
s.rstrip() # ' hello' — 오른쪽만
# 특정 문자 제거
"###hello###".strip("#") # 'hello'
# 입력값 끝의 개행 제거에 자주 사용
line = input().rstrip()
문자열 탐색 (find, index, in, count)
s = "hello world"
"world" in s # True — 포함 여부
s.find("o") # 4 — 첫 번째 위치 (없으면 -1)
s.rfind("o") # 7 — 마지막 위치
s.index("o") # 4 — find와 같지만 없으면 에러
s.count("o") # 2 — 개수
s.startswith("he") # True — 시작 문자열 확인
s.endswith("ld") # True — 끝 문자열 확인
find()는 없으면 -1을 반환하고,index()는 없으면ValueError를 냅니다. 안전하게 쓰려면find()또는in으로 먼저 확인하세요.
문자열 포맷팅 (f-string)
Python 3.6+에서는 f-string이 가장 깔끔하고 빠른 방법입니다.
name, score = "Kim", 95.6789
f"{name}님의 점수는 {score}점" # 'Kim님의 점수는 95.6789점'
f"{score:.2f}" # '95.68' — 소수점 2자리
f"{1000000:,}" # '1,000,000' — 천 단위 콤마
f"{42:05d}" # '00042' — 0으로 채워 5자리
f"{0.25:.1%}" # '25.0%' — 퍼센트
f"{name:>10}" # ' Kim' — 오른쪽 정렬(10칸)
f"{name:<10}" # 'Kim ' — 왼쪽 정렬
f"{name:^10}" # ' Kim ' — 가운데 정렬
f"{name=}" # "name='Kim'" — 디버깅용 (3.8+)
# 구버전 호환 방식
"{}님 {}점".format(name, score)
문자열 ↔ 숫자 / 리스트 변환
# 문자열 → 숫자
int("123") # 123
float("3.14") # 3.14
int("ff", 16) # 255 — 16진수 문자열
# 숫자 → 문자열
str(123) # '123'
# 문자열 → 리스트
list("abc") # ['a', 'b', 'c']
# 문자열 뒤집기
"hello"[::-1] # 'olleh'
# 각 글자 빈도 세기
from collections import Counter
Counter("banana") # {'a': 3, 'n': 2, 'b': 1}
유용한 검사 메서드
"12345".isdigit() # True — 숫자로만 구성?
"abc".isalpha() # True — 알파벳으로만?
"abc123".isalnum() # True — 알파벳+숫자?
" ".isspace() # True — 공백으로만?
"Hello".islower() # False
자주 묻는 질문
Q. 문자열의 특정 글자만 바꾸려면?
문자열은 불변이라 s[0] = "x"처럼 직접 수정할 수 없습니다. 슬라이싱으로 새 문자열을 만들거나("x" + s[1:]), replace()를 쓰세요.
Q. split()과 splitlines()의 차이는?
split()은 지정한 구분자(기본 공백)로 자르고, splitlines()는 줄바꿈 문자를 기준으로 자릅니다. 여러 줄 텍스트를 줄 단위로 다룰 땐 splitlines()가 편합니다.
Q. 문자열을 합칠 때 + 와 join 중 뭐가 빠른가요?
많은 문자열을 합칠 때는 join이 훨씬 빠릅니다. +는 합칠 때마다 새 문자열을 만들기 때문에 반복이 많으면 느려집니다.
마무리
파이썬 문자열의 핵심은 자르기는 split/슬라이싱, 합치기는 join, 치환은 replace, 포맷팅은 f-string입니다. 그리고 문자열은 불변이라 모든 메서드가 새 문자열을 반환한다는 점만 기억하면 대부분의 함정을 피할 수 있습니다.
특히 f-string은 가독성과 속도 모두 뛰어나므로, 포맷팅이 필요할 때 가장 먼저 떠올리면 됩니다. 필요할 때마다 이 글을 다시 펼쳐 해당 섹션을 복사해 쓰세요.
함께 보면 좋은 글: [파이썬 리스트 완벽 정리], [파이썬 딕셔너리 완벽 정리]