이 페이지의 내용

Python 문자열: 변환, 정리, 찾기 및 서식 지정

문자열은 Python에서 가장 자주 다루는 데이터 타입입니다. 사용자 입력, 파일 내용, 웹 페이지, CSV 행은 모두 텍스트로 도착합니다. 문자열은 과소평가하기 쉽습니다. Python 문자열은 불변(immutable)이기 때문입니다. 어떤 메서드도 문자열을 제자리에서 변경하지 않으며, 모든 연산은 새 문자열을 반환합니다. 이 페이지는 DelftStack의 문자열 가이드 115개 전체를 수행하려는 작업 기준으로 정리했습니다. 네 가지 작업 축, 즉 텍스트를 다른 타입으로 변환하고 되돌리기, 속하지 않는 문자 정리하기, 문자열에 무엇이 들어 있는지 찾고 확인하기, 출력을 위해 텍스트 서식 지정 및 바꾸기를 따라 구성했습니다.

Python 문자열 연산 한눈에 보기: 텍스트 변환, 정리, 찾기, 서식 지정

문자열 학습 경로

먼저 5분간 기초부터 시작하세요. 문자열이 어떻게 만들어지고, 인덱싱과 슬라이싱이 어떻게 동작하며, 불변성 때문에 왜 항상 반환값을 보관해야 하는지 익힙니다. 다음으로 찾기와 정리를 배웁니다. find(), in 연산자, strip(), replace()가 일상적인 텍스트 작업의 대부분을 처리합니다. 이어서 변환으로 넘어갑니다. 여기서는 문자열이 리스트, 숫자, 딕셔너리, 바이트와 자리를 맞바꿉니다. 마지막은 서식 지정과 바꾸기입니다. f-문자열이 기본값이며, 예전 스타일은 여전히 제 몫을 하는 자리에서만 등장합니다. 아래의 각 단계는 이 페이지의 그룹 하나씩에 대응하며, 배워야 할 순서대로 배열했습니다.

5분 기초: 만들기, 연결하기, 반복하기

문자열은 작은따옴표나 큰따옴표로 감싼 문자의 나열입니다. 삼중 따옴표는 여러 줄에 걸쳐 있고, 인덱싱과 슬라이싱으로 어떤 부분이든 읽을 수 있습니다. 작업의 대부분을 담당하는 사실은 두 가지입니다. len()이 문자열의 길이를 재고, 더 긴 문자열을 만들면 항상 새 값이 생긴다는 것입니다.

  • Python에서 문자열 N번 반복 — 고정된 횟수의 복사본은 *로 곱하고, 이후 반복과 슬라이싱으로 목표 길이에 정확히 맞추며, 빈 소스와 음수 길이를 검증합니다.
  • 파이썬에서 문자열 복사 — 불변성 때문에 두 변수가 하나의 값을 공유하는 이유를 설명한 뒤, 빈 문자열 연결, 전체 슬라이싱, str(), %, format(), f-문자열이라는 여섯 가지 복제 방법을 소개합니다.
  • Python에서 여러 줄 문자열 만들기 — 진짜 여러 줄 텍스트에는 삼중 따옴표를, 하나의 논리 줄에는 백슬래시와 괄호 연결을, 고정 폭 출력에는 textwrap.fill()을 사용합니다.
  • Python에서 한 문자열을 다른 문자열에 추가 — +와 str.join()의 비교입니다. 조각이 많을 때는 join()이 이깁니다. +를 쓸 때마다 새 중간 문자열이 만들어지기 때문입니다.

변환: 문자열을 리스트와 숫자로, 그리고 반대로

변환이야말로 문자열 작업이 진가를 발휘하는 곳입니다. 데이터는 텍스트로 도착해 다른 무언가로 사용됩니다. 가장 붐비는 출입구는 리스트이고, 그다음이 숫자입니다. 컨테이너는 str()이나 join()으로 평평해지고, 바이트는 명시적인 인코딩을 통해서만 넘어옵니다. 한편 이웃 주제 하나는 다른 곳에 있습니다. datetime을 문자열로 바꾸는 작업은 Datetime 가이드의 담당이니, Python 필러의 Datetime 섹션을 참고하세요.

정리 및 삭제: 속하지 않는 문자 제거하기

정리는 이 클러스터의 홈그라운드입니다. 스크레이핑한 페이지, 내보낸 파일, 사용자 입력은 초대받지 않은 문자를 끼워 넣은 채 도착합니다. 오염의 모양에 따라 고르세요. 알려진 부분 문자열 하나에는 replace(), 문자 집합 전체를 한 번에 처리할 때는 테이블을 쓰는 translate(), 오염이 리터럴이 아니라 패턴일 때는 정규식이 적합합니다.

찾기, 확인 및 개수 세기

찾기는 이 클러스터에서 가장 충족되지 않은 수요입니다. 독자는 원하는 문자를 알고 있고, 그 위치, 개수, 또는 예/아니오라는 답을 필요로 합니다. 역할 분담을 분명히 하세요. in은 ‘있는지’에, find()는 ‘첫 번째가 어디인지’에, index()는 ‘어디인지’에 답하면서 일치하는 것이 없으면 크게 항의하고, count()는 ‘몇 개인지’에 답합니다.

대소문자, 비교 및 채우기

대소문자는 비교가 조용히 어긋나는 지점입니다. Python은 유니코드 코드 포인트 기준으로 비교하므로 대소문자와 특수 문자가 모두 영향을 줍니다. 비교 전에 정규화하세요. 일반 텍스트에는 lower()나 upper()를, 유니코드 쌍을 일치시켜야 할 때는 casefold()를 사용하고, 표현을 위해서는 ljust(), rjust(), center(), zfill()로 채웁니다.

서식 지정 및 바꾸기

새 코드에서 서식 지정이란 f-문자열을 뜻합니다. 값이 템플릿 안, 읽을 수 있는 자리에 놓이고, 서식 지정자가 너비와 정밀도를 제어합니다. str.format()은 템플릿이 따로 있거나 재사용될 때 여전히 적합하고, % 서식은 앞으로도 만나게 될 오래된 코드 속에 살아남아 있습니다. 바꾸기도 다른 모든 것과 마찬가지로 불변성을 따릅니다. 문자열을 편집하는 것이 아니라, 수정된 새 문자열을 만드는 것입니다.

문자열 메서드 맵

Python에는 47개의 내장 문자열 메서드가 들어 있으며, 이 맵을 쓰면 알맞은 것을 빠르게 찾을 수 있습니다. 동사 기준으로 읽으세요. is* 계열은 확인을, 대소문자 메서드는 변환을, split과 join은 분해와 재구성을, 검색 계열 메서드는 위치 찾기를 담당합니다. 어떤 메서드를 더 깊게 다루는 가이드가 있으면 세 번째 열에서 링크합니다. 셀이 비어 있으면 한 줄 설명으로 충분하다는 뜻입니다.

메서드 역할 자세히 보기
capitalize() 첫 문자를 대문자로, 나머지를 소문자로 변환 자세히 보기
casefold() 대소문자를 구분하지 않는 매칭을 위해 만들어진 강력한 소문자화 자세히 보기
center() 지정한 너비의 필드 중앙에 문자열을 배치 자세히 보기
count() 부분 문자열이 겹치지 않게 등장하는 횟수를 셈 자세히 보기
encode() 선택한 인코딩으로 문자열을 바이트로 인코딩 자세히 보기
endswith() 문자열이 접미사로 끝나는지 테스트
expandtabs() 탭 문자를 공백으로 바꿈
find() 부분 문자열의 가장 낮은 인덱스, 없으면 -1 자세히 보기
format() {} 플레이스홀더에 값을 서식 지정 자세히 보기
format_map() format()과 같지만 값은 매핑에서 가져옴
index() 부분 문자열의 가장 낮은 인덱스, 없으면 ValueError 발생 자세히 보기
isalnum() 모든 문자가 문자 또는 숫자이면 True 자세히 보기
isalpha() 모든 문자가 알파벳이면 True
isascii() 모든 문자가 ASCII이면 True
isdecimal() 모든 문자가 10진수 숫자이면 True
isdigit() 모든 문자가 숫자이면 True 자세히 보기
isidentifier() 문자열이 유효한 Python 식별자이면 True
islower() 대소문자가 있는 문자가 모두 소문자이면 True
isnumeric() 모든 문자가 수치이면 True
isprintable() 모든 문자가 인쇄 가능하면 True
isspace() 모든 문자가 공백이면 True
istitle() 문자열이 타이틀 케이스이면 True
isupper() 대소문자가 있는 문자가 모두 대문자이면 True
join() 이 문자열을 구분자로 삼아 문자열 이터러블을 연결 자세히 보기
ljust() 지정한 너비의 필드에서 왼쪽 정렬 자세히 보기
lower() 소문자로 바꾼 복사본을 반환 자세히 보기
lstrip() 앞부분 문자를 제거 (기본값은 공백)
maketrans() translate()용 변환 테이블을 생성 자세히 보기
partition() 첫 번째 구분자에서 나눠 세 부분 튜플로 반환
removeprefix() 접두사가 있으면 제거
removesuffix() 접미사가 있으면 제거
replace() 부분 문자열의 등장 위치를 다른 문자열로 바꿈 자세히 보기
rfind() 부분 문자열의 가장 높은 인덱스, 없으면 -1 자세히 보기
rindex() 부분 문자열의 가장 높은 인덱스, 없으면 ValueError 발생
rjust() 지정한 너비의 필드에서 오른쪽 정렬 자세히 보기
rpartition() 마지막 구분자에서 나눠 세 부분 튜플로 반환
rsplit() 오른쪽부터 세면서 구분자로 나눔
rstrip() 끝부분 문자를 제거 (기본값은 공백)
split() 구분자로 나눠 리스트로 반환 자세히 보기
splitlines() 줄 경계에서 나눠 리스트로 반환
startswith() 문자열이 접두사로 시작하는지 테스트 자세히 보기
strip() 앞부분과 끝부분 문자를 제거 자세히 보기
swapcase() 모든 문자의 대소문자를 뒤바꾼 복사본을 반환
title() 각 단어의 첫 글자가 대문자인 타이틀 케이스 복사본을 반환
translate() 변환 테이블을 통해 문자를 매핑 자세히 보기
upper() 대문자로 바꾼 복사본을 반환 자세히 보기
zfill() 지정한 너비가 되도록 앞에 0을 채움 자세히 보기

자주 묻는 질문

Python에서 문자열을 리스트로 변환하려면 어떻게 하나요?

하나의 요소가 무엇이어야 할지 정한 뒤, 거기에 맞는 도구를 고르세요. list(text)는 문자마다 하나의 요소를, text.split()은 단어를, text.split(",")는 구분자로 나뉜 필드를 주며 빈 필드도 보존합니다. 이미 Python 리스트처럼 보이는 텍스트는 ast.literal_eval()로 파싱하고, 결과가 정말 리스트인지 확인하세요. 통제할 수 없는 입력에는 절대 eval()을 쓰지 마세요. 전체 절차는 Python에서 문자열을 리스트로 변환하는 방법에 있습니다.

문자열에 부분 문자열이나 단어가 포함되어 있는지 어떻게 확인하나요?

단순한 부분 문자열 테스트에는 in 연산자를 사용합니다. "word" in text는 불리언을 반환하며 대소문자를 구분합니다. 위치도 필요하면 find()가 첫 번째 인덱스나 -1을 반환하고, index()는 대신 ValueError를 발생시킵니다. in은 더 큰 단어 안에서도 일치한다는 점에 유의하세요. "is" in "This"는 참입니다. 따라서 단어 전체를 대상으로 할 때는 토큰화하거나 \b 경계를 쓰는 정규식을 사용합니다. Python에서 문자열에 Word가 포함되어 있는지 확인에서 보여주는 방식입니다.

문자열에서 구두점이나 특수 문자를 제거하려면 어떻게 하나요?

먼저 무엇을 없앨지 정의하세요. 구두점만인지, 문자와 숫자가 아닌 전부인지에 따라 달라집니다. 구두점에는 string.punctuation에 대한 필터, 정규식 [^\w\s] 치환, maketrans()로 만든 str.translate() 테이블을 이용한 일괄 삭제(가장 빠른 선택지)가 있습니다. 더 넓은 정리에는 isalnum() 필터가 유니코드 문자와 숫자를 보존합니다. 파이썬에서 문자열에서 구두점을 제거하는 방법이 각 변형을 설명합니다.

Python에서 “not all arguments converted during string formatting” 오류가 발생하는 이유는 무엇인가요?

이 TypeError는 % 서식 지정에서 발생합니다. 템플릿 안의 플레이스홀더 수가 전달한 값 튜플보다 적어서, 인자가 남은 채로 템플릿의 끝에 도달하기 때문입니다. 예를 들어 "Value: " % (1, 2)가 그렇습니다. 각 값마다 정확히 하나의 플레이스홀더를 주고, 단일 값은 요소가 하나인 튜플로 감싸며, 리터럴 퍼센트 기호는 %%`로 이스케이프하세요. 전용 오류 가이드가 이 메시지를 사례별로 해부합니다.

Python에 toString()이 있나요?

없습니다. Python에는 toString() 메서드가 없습니다. 그것을 찾는 것은 Java에서 가져온 습관입니다. 동등한 것은 내장 str(value)로, 숫자, 컬렉션, 대부분의 객체에 대해 읽기 좋은 문자열을 반환합니다. 여러 문자열을 합칠 때는 join()을, 메시지를 만들 때는 f-문자열을, 출력 방식을 제어하려면 직접 만든 클래스에 __str__()을 정의하세요. 단, str()이 만드는 것은 표시용 텍스트이지 JSON이나 CSV가 아닙니다. Python에서 tostring()에 해당하는 기능을 참고하세요.

특정 인덱스에 있는 한 문자를 바꾸려면 어떻게 하나요?

문자열에 대입할 수는 없습니다. 문자열은 불변이므로 text[2] = "m"은 TypeError를 발생시킵니다. 대신 바꿀 문자열을 새로 만드세요. 위치 전후를 슬라이싱하는 text[:2] + "m" + text[3:], 또는 리스트로 변환해 인덱스에 대입한 뒤 "".join(...)으로 다시 합치는 방법이 있습니다. 둘 다 새 문자열을 반환하고 원본은 건드리지 않습니다. 인덱스가 사용자 입력에서 온 경우 len(text)에 대해 검증하세요. Python의 인덱스에서 문자열의 문자 바꾸기가 두 방법을 모두 보여줍니다.

모든 Python 문자열 가이드

기초

변환

정리 및 삭제

찾기, 확인 및 개수 세기

대소문자, 비교 및 채우기

서식 지정 및 바꾸기

추가 문자열 문서