메서드를 달고 있는 텍스트
파이썬 문자열은 문자들의 연속이에요. 그리고 여러분은 어떤 타입보다 문자열을 더 많이 쓰게 됩니다. 이름, 라벨, 메시지, URL, 파일 경로, API 응답 — 다 어느 시점엔 문자열 안에서 살거든요.
따옴표로 만들면 돼요. 작은따옴표, 큰따옴표, 삼중 따옴표 모두 가능합니다:
작은따옴표와 큰따옴표는 바꿔 써도 돼요. 이스케이프할 필요가 없게 만들어 주는 쪽을 쓰세요. "don't"는 깔끔하지만, 'don\'t'는 백슬래시가 필요하죠.
문자열은 불변(immutable) 이에요. 한 번 만들어진 문자열의 문자 하나도 그 자리에서 바꿀 수 없어요. 문자열을 바꾸는 것처럼 보이는 모든 연산은 실제로는 새 문자열을 돌려줍니다. text.upper()만 호출하는 게 아니라 text = text.upper()라고 쓰는 이유가 그거예요 — 재할당하지 않으면 새로 만들어진 대문자 문자열이 그냥 버려지거든요.
이어 붙이기와 반복하기
필요한 문자열 합치기의 대부분은 연산자 두 개로 끝나요:
+는 문자열을 이어 붙이고, *는 반복합니다. 둘 다 새 문자열을 돌려줘요.
여러 조각을 +로 계속 이어 붙이다 보면 금방 지저분해져요. 서로 다른 타입의 값들을 한 메시지에 섞을 때는 f-string을 쓰세요 — 바로 다음 절에서 다룹니다.
f-string: 보통 이걸로 포매팅하게 될 거예요
여는 따옴표 앞에 f를 붙이면 그 문자열이 템플릿이 돼요. {...} 안에 있는 건 그 표현식의 값으로 대체됩니다:
중괄호 안에는 어떤 표현식이든 넣을 수 있어요 — 변수, 산술, 메서드 호출, 함수 호출. 다만 간단하게 유지하세요. 세 줄짜리 계산을 {...}에 욱여넣고 싶어진다면, 먼저 이름 있는 변수에 계산해 놓으세요.
f-string은 콜론 뒤에 포맷 명세(format specifier)도 지원해요. 숫자 포매팅, 패딩, 정렬을 제어할 수 있어요:
이 포맷 명세는 str.format()이 쓰는 것과 같아서, 기본이 익숙해지면 한 번 훑어봐 둘 만해요. 첫날 쓸 코드에는 필요 없습니다.
슬라이싱: 한 조각 뽑아내기
문자열은 시퀀스처럼 인덱싱할 수 있어요. 각 문자는 0부터 시작하는 위치를 가지고, 한 글자를 뽑을 수도 범위로 잘라낼 수도 있습니다:
[start:stop:step] 패턴은 리스트를 비롯한 다른 시퀀스에서도 똑같이 등장하니까, 몇 분만 투자해서 감을 잡아두면 어디서든 쓸 수 있어요.
두 가지는 짚고 넘어가 둡시다:
stop인덱스는 제외됩니다:word[0:2]는 인덱스 0과 1까지 포함, 2는 안 들어가요.- 음수 인덱스는 끝에서부터 셉니다:
-1이 마지막 문자,-2가 그 앞 문자, 이런 식이에요.
문자열 뒤집는 방법
문자열에는 .reverse() 메서드가 없어요 — 불변이니까요 — 하지만 단계 값을 -1로 해서 슬라이싱하면 한 줄로 끝납니다:
word[::-1]은 "처음부터 끝까지 한 칸씩 뒤로"로 읽으면 돼요. 결과는 완전히 새 문자열이고, 원본은 그대로입니다. 새 문자열을 실제로 만들지 않고 역순으로 문자만 순회하고 싶다면 reversed(word)가 지연 이터레이터를 돌려줘요.
문자열 길이 확인하는 방법
len(text)는 문자 개수를 돌려줍니다:
len은 바이트가 아니라 유니코드 코드 포인트 수를 센다는 걸 기억하세요. len("café")는 5가 아니라 4예요. UTF-8 인코딩으로는 바이트가 더 많이 들지만 말이죠 — 대개 여러분이 원하시는 건 전자예요.
문자열에 부분 문자열이 있는지 확인하기
in 연산자가 파이썬식 표현이고, 영어처럼 읽힙니다:
대소문자 구분 없이 검사하려면 양쪽을 먼저 같은 케이스로 맞추세요:
있다/없다가 아니라 위치가 필요하면 .find()를 쓰세요 — 찾은 인덱스를, 없으면 -1을 돌려줍니다.
자주 쓰는 문자열 메서드
문자열은 수십 가지 메서드를 가지고 있어요. 이 몇 개는 정말 수시로 꺼내 쓰게 됩니다:
나누고 합치기:
.split(separator)는 문자열을 리스트로 바꾸고, separator.join(list_of_strings)는 다시 이어 붙입니다. 실무의 문자열 작업에서 이 두 메서드가 어마어마하게 많은 일을 해요.
쓸모 있는 한 쌍 더:
한 줄짜리 설정 항목 파서를, 세 줄로 만든 거예요. 작은 문자열, 큰 지렛대.
내용 검사하기
몇몇 메서드는 불리언을 돌려줘서 if 조건에 쓰기 좋아요:
아껴 쓰세요 — 유니코드의 여러 예외 상황을 여러분이 기대하는 방식으로 다 처리해 주지는 못해요. ASCII 범위를 벗어나는 작업에서는 regex 모듈이나 unicodedata 모듈에 기대는 게 낫습니다.
특수 문자 이스케이프
어떤 문자들은 문자열 안에서 백슬래시가 필요해요:
Windows 경로나 정규식을 쓴다면 raw 문자열이 편해요. 따옴표 앞에 r을 붙이면 백슬래시가 이스케이프 문자로 동작하지 않습니다:
문자열은 어디에나 있어요. 그러니까 읽기 좋게 유지하세요
문자열을 많이 다루는 코드가 뒤죽박죽이 되지 않게 해주는 습관 세 가지:
- 보간은 f-string으로 하세요. 여러 타입을
+로 줄줄이 잇지 마세요. - "변경"할 때는 재할당하세요.
text.strip()만 쓰지 말고text = text.strip()으로요. - 텍스트를 파싱하거나 조립할 때 수동 반복문을 쓰기 전에
.split()과.join()을 꺼내 보세요. 더 빠르고, 더 명확하고, 실수하기 더 어려워요.
다음은 f-string을 더 깊이 다룹니다 — 이미 몇 번 보신 그 포매팅 도구에, 숫자와 날짜 포맷 명세까지 더해 배울 가치가 있는 이유를 보여드릴게요.
자주 묻는 질문
파이썬의 f-string이 뭔가요?
f-string은 앞에 f를 붙인 문자열 리터럴로, {...} 안에 들어간 건 실행 시점에 그 표현식의 값으로 대체됩니다. 예: f"Hello, {name}!"는 현재 name 값을 문자열에 그대로 끼워 넣어요.
파이썬에서 문자열은 어떻게 뒤집나요?
단계 값이 -1인 슬라이싱을 쓰세요: reversed_text = original[::-1]. 같은 문자들을 반대 순서로 담은 새 문자열을 돌려줍니다. 파이썬 문자열은 불변이라 원본은 그대로예요.
파이썬에서 문자열은 어떻게 나누나요?
문자열에 .split()을 호출하세요. 인자 없이 쓰면 공백 기준으로 나눠요: "a b c".split()은 ['a', 'b', 'c']를 돌려줍니다. 특정 구분자를 넘길 수도 있어요: "a,b,c".split(",")은 ['a', 'b', 'c']가 돼요.
파이썬 문자열은 변경 가능한가요?
아니요. 문자열은 불변(immutable) 이에요 — 한 번 만들어진 문자열의 문자 하나도 그 자리에서 바꿀 수 없어요. 문자열을 "바꾸는" 것처럼 보이는 모든 메서드는 사실 새 문자열을 반환합니다. text = text.strip() 같은 패턴이 자주 보이는 이유가 그거예요 — 새 문자열을 다시 변수에 할당하는 거예요.
파이썬에서 문자열은 어떻게 이어 붙이나요?
두 문자열을 합칠 때는 +를 쓰세요: "hello" + " " + "world". 값을 문장에 끼워 넣을 때는 f-string이 더 깔끔해요: f"Hello, {name}". 리스트의 여러 조각을 이어 붙일 때는 separator.join(pieces)를 쓰세요 — +로 연결하는 것보다 빠르고 읽기도 좋아요.
파이썬에서 문자열 길이는 어떻게 확인하나요?
내장 함수 len(text)를 호출하세요. 문자(유니코드 코드 포인트) 개수를 돌려주니까 len("café")는 4예요. 바이트 길이가 필요하면 먼저 인코딩하세요: len(text.encode("utf-8")).