본문 바로가기
Python

04. 문자열 다루기 - 텍스트와 친해지기

by 샤나엘 2026. 2. 21.
반응형

문자열 다루기

04. 문자열 다루기 - 텍스트와 친해지기

프로그래밍에서 숫자만큼 자주 다루는 것이 문자열이다. 이름, 주소, 이메일, 메시지... 대부분의 데이터는 결국 텍스트다. 문자열을 자유자재로 다루는 법을 익혀보자.


문자열 만들기

2편에서 잠깐 배웠지만, 다시 정리하고 넘어가자.

# 작은따옴표
name = '홍길동'

# 큰따옴표
greeting = "안녕하세요"

# 여러 줄 문자열 (삼중 따옴표)
poem = """장미는 빨갛고
제비꽃은 파랗고
파이썬은 재밌다"""
print(poem)

작은따옴표와 큰따옴표의 기능 차이는 없다. 다만 따옴표 안에 따옴표가 필요할 때 유용하다.

# 큰따옴표 안에 작은따옴표
msg1 = "그가 '안녕'이라고 말했다"

# 작은따옴표 안에 큰따옴표
msg2 = '그가 "안녕"이라고 말했다'

# 이스케이프 문자 사용
msg3 = "그가 \"안녕\"이라고 말했다"

인덱싱 - 한 글자 꺼내기

문자열은 글자들이 순서대로 나열된 것이다. 각 글자에는 번호(인덱스)가 붙어있다.

문자열 인덱싱

핵심: 인덱스는 0부터 시작한다!

text = "파이썬"

print(text[0])    # 파
print(text[1])    # 이
print(text[2])    # 썬

뒤에서부터 셀 수도 있다. 이때는 음수 인덱스를 사용한다.

text = "Python"

print(text[-1])   # n (맨 뒤)
print(text[-2])   # o (뒤에서 두 번째)
print(text[-6])   # P (맨 앞 = 뒤에서 여섯 번째)

💡 팁: 음수 인덱스는 뒤에서부터 세는 것이다. -1이 마지막 글자, -2가 마지막에서 두 번째... 이런 식이다.


슬라이싱 - 문자열 잘라내기

인덱싱이 한 글자를 꺼내는 것이라면, 슬라이싱은 범위를 지정해서 여러 글자를 한꺼번에 꺼내는 것이다.

문자열 슬라이싱

 

text = "Hello Python"

# text[시작:끝] - 시작부터 끝-1까지
print(text[0:5])     # Hello
print(text[6:12])    # Python

# 시작 생략 = 처음부터
print(text[:5])      # Hello

# 끝 생략 = 끝까지
print(text[6:])      # Python

# 둘 다 생략 = 전체 복사
print(text[:])       # Hello Python

⚠️ 주의: text[0:5]는 인덱스 0, 1, 2, 3, 4까지다. 5는 포함하지 않는다! "시작은 포함, 끝은 미포함" - 이것만 기억하면 된다.

스텝(간격) 지정하기

세 번째 숫자로 간격을 지정할 수 있다.

text = "0123456789"

# 2칸씩 건너뛰기
print(text[::2])     # 02468

# 뒤집기!
print(text[::-1])    # 9876543210

문자열 뒤집기는 면접이나 코딩 테스트에서도 자주 나오는 패턴이다.

word = "파이썬"
print(word[::-1])    # 썬이파

문자열 연산

문자열도 +*로 연산할 수 있다. 다만 숫자와는 의미가 다르다.

# 문자열 연결 (이어붙이기)
first = "Hello"
last = "World"
print(first + " " + last)    # Hello World

# 문자열 반복
print("하" * 3)     # 하하하
print("-" * 30)     # ------------------------------ (구분선 만들기)
# 실전 예시: 이름표 만들기
name = "홍길동"
print("=" * 20)
print(f"  이름: {name}")
print("=" * 20)

출력:

====================
  이름: 홍길동
====================

주요 문자열 메서드

메서드(method)란 문자열에 붙어있는 기능이다. 문자열.메서드이름() 형태로 사용한다.

주요 문자열 메서드

대소문자 변환

text = "Hello Python"

print(text.upper())      # HELLO PYTHON (전부 대문자)
print(text.lower())      # hello python (전부 소문자)
print(text.title())      # Hello Python (단어 첫 글자만 대문자)

공백 제거

사용자 입력을 받을 때 앞뒤에 불필요한 공백이 들어오는 경우가 많다. 이때 유용하다.

text = "  Hello Python  "

print(text.strip())      # "Hello Python" (양쪽 공백 제거)
print(text.lstrip())     # "Hello Python  " (왼쪽만)
print(text.rstrip())     # "  Hello Python" (오른쪽만)

찾기와 바꾸기

text = "파이썬은 재밌다. 파이썬을 열심히 공부하자."

# 찾기
print(text.find("파이썬"))      # 0 (처음 등장하는 위치)
print(text.find("자바"))        # -1 (없으면 -1)
print(text.count("파이썬"))     # 2 (등장 횟수)

# 바꾸기
print(text.replace("파이썬", "Python"))
# Python은 재밌다. Python을 열심히 공부하자.

나누기와 합치기

# split: 문자열을 쪼개서 리스트로
sentence = "사과,바나나,포도,수박"
fruits = sentence.split(",")
print(fruits)    # ['사과', '바나나', '포도', '수박']

# 공백 기준으로 나누기
words = "Hello Python World".split()
print(words)     # ['Hello', 'Python', 'World']

# join: 리스트를 합쳐서 문자열로
result = " - ".join(fruits)
print(result)    # 사과 - 바나나 - 포도 - 수박

시작/끝 확인

filename = "report.pdf"

print(filename.startswith("report"))   # True
print(filename.endswith(".pdf"))       # True
print(filename.endswith(".xlsx"))      # False

구성 확인

print("12345".isdigit())       # True (숫자로만 구성?)
print("hello".isalpha())       # True (글자로만 구성?)
print("hello123".isalnum())    # True (글자+숫자로만 구성?)
print("  ".isspace())          # True (공백으로만 구성?)

문자열 메서드 정리표

분류 메서드 설명
대소문자 upper() 전부 대문자로
lower() 전부 소문자로
title() 단어 첫 글자만 대문자
공백 제거 strip() 양쪽 공백 제거
lstrip() 왼쪽 공백 제거
rstrip() 오른쪽 공백 제거
찾기/바꾸기 find() 문자 위치 찾기 (없으면 -1)
count() 등장 횟수 세기
replace(a, b) a를 b로 바꾸기
나누기/합치기 split() 문자열 → 리스트로 쪼개기
join() 리스트 → 문자열로 합치기
시작/끝 확인 startswith() 특정 문자열로 시작하는지
endswith() 특정 문자열로 끝나는지

문자열 포매팅

변수 값을 문자열에 끼워넣는 방법. 세 가지가 있는데, f-string이 가장 편하고 최근 방식이다.

name = "홍길동"
age = 25
score = 98.5

# 방법 1: f-string (추천!)
print(f"이름: {name}, 나이: {age}세")

# 방법 2: format() 메서드
print("이름: {}, 나이: {}세".format(name, age))

# 방법 3: % 연산자 (옛날 방식)
print("이름: %s, 나이: %d세" % (name, age))

f-string 활용법

f-string 안에서는 계산식도 사용할 수 있다.

price = 15000
quantity = 3

print(f"단가: {price}원")
print(f"수량: {quantity}개")
print(f"합계: {price * quantity}원")
print(f"부가세 포함: {price * quantity * 1.1:.0f}원")

출력:

단가: 15000원
수량: 3개
합계: 45000원
부가세 포함: 49500원

💡 팁: :.0f는 소수점 이하를 표시하지 않겠다는 뜻이다. :.2f면 소수점 둘째 자리까지 표시한다. 가격 같은 것을 깔끔하게 출력할 때 유용하다.


문자열은 변경할 수 없다 (불변)

파이썬의 문자열은 한번 만들면 수정이 불가능하다. 이걸 "불변(immutable)"이라고 한다.

text = "Hello"
# text[0] = "h"   # TypeError! 문자열은 수정 불가

# 새 문자열을 만들어야 한다
text = "h" + text[1:]
print(text)    # hello

replace() 같은 메서드도 원본을 바꾸는 게 아니라 새 문자열을 만들어서 돌려주는 것이다.

original = "Hello"
new = original.replace("H", "h")

print(original)    # Hello (원본 그대로!)
print(new)         # hello (새로 만들어진 문자열)

직접 해보기

문제 1. 이메일 주소에서 아이디와 도메인을 분리해보자.

email = "python@example.com"
# 결과: 아이디 = python, 도메인 = example.com

문제 2. 주어진 문자열을 뒤집고, 모두 대문자로 바꿔보자.

text = "Hello Python"
# 결과: NOHTYP OLLEH

문제 3. 다음 문장에서 "파이썬"이 몇 번 나오는지 세고, 전부 "Python"으로 바꿔보자.

text = "파이썬은 쉽다. 파이썬은 강력하다. 파이썬을 배우자."

문제 4. f-string을 사용해서 아래와 같이 출력해보자.

========== 성적표 ==========
이름: 홍길동
국어: 90점
영어: 85점
수학: 95점
평균: 90.0점
============================
정답 보기
# 문제 1
email = "python@example.com"
parts = email.split("@")
print(f"아이디 = {parts[0]}, 도메인 = {parts[1]}")
‍
# 문제 2
text = "Hello Python"
result = text[::-1].upper()
print(result)    # NOHTYP OLLEH
‍
# 문제 3
text = "파이썬은 쉽다. 파이썬은 강력하다. 파이썬을 배우자."
print(f"파이썬 등장 횟수: {text.count('파이썬')}번")
print(text.replace("파이썬", "Python"))
‍
# 문제 4
name = "홍길동"
kor, eng, math = 90, 85, 95
avg = (kor + eng + math) / 3
print("=" * 28)
print(f"{'성적표':^12}")
print("=" * 28)
print(f"이름: {name}")
print(f"국어: {kor}점")
print(f"영어: {eng}점")
print(f"수학: {math}점")
print(f"평균: {avg}점")
print("=" * 28)

오늘의 정리

항목 내용
인덱싱 text[0], text[-1] - 한 글자 꺼내기
슬라이싱 text[시작:끝] - 범위로 잘라내기 (끝은 미포함)
문자열 연산 + (연결), * (반복)
주요 메서드 upper, lower, strip, find, replace, split, join
포매팅 f"값은 {변수}" - f-string 추천!
불변성 문자열은 수정 불가. 새로 만들어야 한다

다음 편 예고: 입력과 출력 - 사용자와 대화하기

지금까지는 코드에 직접 값을 적었다. 다음 시간에는 input()으로 사용자에게 값을 입력받고, print()를 더 다양하게 활용하는 방법을 배운다.


태그: 파이썬 Python 파이썬독학 문자열 string 슬라이싱 인덱싱 split join format 파이썬기초 IT교육

반응형

댓글