파이썬 강의 8편: 문자열 처리
· 4분 읽기
파이썬 강의 8편: 문자열 처리
문자열이란?
문자열(String)은 문자들의 시퀀스입니다. 파이썬에서 문자열은 매우 강력하고 유연하게 처리할 수 있습니다.
문자열 생성
# 작은따옴표
str1 = 'Hello'
# 큰따옴표
str2 = "World"
# 삼중따옴표 (여러 줄)
str3 = """여러 줄
문자열입니다"""
# 이스케이프 문자
str4 = "안녕하세요\n줄바꿈입니다"
문자열 접근
인덱스로 문자에 접근할 수 있습니다:
text = "Python"
print(text[0]) # P (첫 번째 문자)
print(text[-1]) # n (마지막 문자)
print(text[1:4]) # yth (슬라이싱)
문자열 연산
# 연결
greeting = "안녕" + "하세요"
print(greeting) # 안녕하세요
# 반복
print("Hello" * 3) # HelloHelloHello
# 길이
text = "Python"
print(len(text)) # 6
문자열 메서드
대소문자 변환
text = "Hello World"
print(text.upper()) # HELLO WORLD
print(text.lower()) # hello world
print(text.capitalize()) # Hello world
print(text.title()) # Hello World
공백 제거
text = " Python "
print(text.strip()) # Python (양쪽 공백 제거)
print(text.lstrip()) # Python (왼쪽 공백 제거)
print(text.rstrip()) # Python (오른쪽 공백 제거)
문자열 찾기
text = "Hello World"
print(text.find("World")) # 6 (인덱스 반환)
print(text.find("Python")) # -1 (없으면 -1)
print(text.index("World")) # 6
print("World" in text) # True
print(text.count("l")) # 3 (개수)
문자열 분할과 결합
# split(): 문자열 분할
text = "사과,바나나,오렌지"
fruits = text.split(",")
print(fruits) # ['사과', '바나나', '오렌지']
# join(): 문자열 결합
fruits = ["사과", "바나나", "오렌지"]
text = ", ".join(fruits)
print(text) # 사과, 바나나, 오렌지
문자열 교체
text = "Hello World"
new_text = text.replace("World", "Python")
print(new_text) # Hello Python
문자열 검사
text = "Hello123"
print(text.isdigit()) # False (모두 숫자인지)
print(text.isalpha()) # False (모두 문자인지)
print(text.isalnum()) # True (문자 또는 숫자인지)
print(text.startswith("Hello")) # True
print(text.endswith("123")) # True
문자열 포맷팅
f-string (권장, Python 3.6+)
name = "홍길동"
age = 25
text = f"이름: {name}, 나이: {age}세"
print(text) # 이름: 홍길동, 나이: 25세
# 표현식 사용
text = f"내년 나이: {age + 1}세"
print(text) # 내년 나이: 26세
# 포맷 지정
pi = 3.14159
print(f"원주율: {pi:.2f}") # 원주율: 3.14
format() 메서드
name = "홍길동"
age = 25
text = "이름: {}, 나이: {}세".format(name, age)
print(text) # 이름: 홍길동, 나이: 25세
# 인덱스 사용
text = "이름: {0}, 나이: {1}세, 이름: {0}".format(name, age)
# 키워드 사용
text = "이름: {name}, 나이: {age}세".format(name=name, age=age)
% 포맷팅 (구식)
name = "홍길동"
age = 25
text = "이름: %s, 나이: %d세" % (name, age)
print(text) # 이름: 홍길동, 나이: 25세
실전 예제: 문자열 뒤집기
text = "Python"
# 방법 1: 슬라이싱
reversed_text = text[::-1]
print(reversed_text) # nohtyP
# 방법 2: reversed()와 join()
reversed_text = "".join(reversed(text))
print(reversed_text) # nohtyP
실전 예제: 회문(Palindrome) 확인
def is_palindrome(text):
text = text.lower().replace(" ", "")
return text == text[::-1]
print(is_palindrome("level")) # True
print(is_palindrome("hello")) # False
print(is_palindrome("A man a plan a canal Panama")) # True
실전 예제: 단어 개수 세기
text = "Hello World Python Programming"
words = text.split()
print(f"단어 개수: {len(words)}") # 4
# 각 단어의 길이
for word in words:
print(f"{word}: {len(word)}글자")
실전 예제: 이메일 검증
def is_valid_email(email):
if "@" not in email:
return False
parts = email.split("@")
if len(parts) != 2:
return False
username, domain = parts
if len(username) == 0 or len(domain) == 0:
return False
if "." not in domain:
return False
return True
print(is_valid_email("test@example.com")) # True
print(is_valid_email("invalid.email")) # False
실전 예제: 텍스트 통계
def text_statistics(text):
stats = {
"문자 수": len(text),
"단어 수": len(text.split()),
"줄 수": text.count("\n") + 1,
"대문자": sum(1 for c in text if c.isupper()),
"소문자": sum(1 for c in text if c.islower()),
"숫자": sum(1 for c in text if c.isdigit())
}
return stats
text = """Hello World
Python Programming
123 Numbers"""
stats = text_statistics(text)
for key, value in stats.items():
print(f"{key}: {value}")
정규표현식 기초 (re 모듈)
import re
text = "연락처: 010-XXXX-XXXX"
# 전화번호 패턴 찾기 (예시)
pattern = r"\d{3}-[X\d]{4}-[X\d]{4}"
match = re.search(pattern, text)
if match:
print(f"전화번호 패턴: {match.group()}") # 010-XXXX-XXXX
# 이메일 찾기
text = "이메일: test@example.com"
pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"
match = re.search(pattern, text)
if match:
print(f"이메일: {match.group()}") # test@example.com
문자열 인코딩/디코딩
# 문자열을 바이트로
text = "안녕하세요"
encoded = text.encode("utf-8")
print(encoded) # b'\xec\x95\x88\xeb\x85\x95...'
# 바이트를 문자열로
decoded = encoded.decode("utf-8")
print(decoded) # 안녕하세요
다음에 공부할 내용
다음 포스트에서는 파일 입출력에 대해 공부해보겠습니다.