Python 문자열과 파일 입출력
이 토픽을 마치면
Python으로 문자열을 다양하게 조작하고, 텍스트 파일을 읽고 쓸 수 있습니다.
문자열은 글자의 배열
Python에서 문자열(str)은 글자가 순서대로 나열된 시퀀스입니다. 리스트처럼 인덱싱과 슬라이싱이 됩니다.
text = "BioPlayground"
print(text[0]) # 'B' — 첫 글자print(text[-1]) # 'd' — 마지막 글자print(text[3:7]) # 'Play' — 3번부터 6번까지print(len(text)) # 13문자열은 불변(immutable) 입니다. text[0] = 'b'는 에러가 납니다. 수정하려면 새 문자열을 만들어야 합니다.
자주 쓰는 문자열 메서드
msg = " Hello, World! "
msg.strip() # 'Hello, World!' — 양쪽 공백 제거msg.lower() # ' hello, world! 'msg.upper() # ' HELLO, WORLD! 'msg.replace("World", "Python") # ' Hello, Python! '
# 분리와 결합csv = "사과,바나나,포도"fruits = csv.split(",") # ['사과', '바나나', '포도']"-".join(fruits) # '사과-바나나-포도'
# 포함 여부"바나나" in csv # Truecsv.startswith("사과") # Truecsv.count(",") # 2split()과 join()은 CSV 파싱, 로그 분석, 데이터 전처리에서 매일 쓰입니다.
f-string — 변수를 문자열에 삽입
Python 3.6부터 도입된 f-string은 문자열 안에 변수를 직접 넣는 가장 깔끔한 방법입니다.
name = "김훈"score = 95.5
# f-string (권장)print(f"{name}님의 점수: {score}점")# 김훈님의 점수: 95.5점
# 수식도 가능print(f"합격 여부: {'합격' if score >= 60 else '불합격'}")# 합격 여부: 합격
# 소수점 포맷팅pi = 3.141592print(f"원주율: {pi:.2f}") # 원주율: 3.14이전 방식("% s" % name, "{}".format(name))도 동작하지만, f-string이 가독성과 성능 모두 우수합니다.
파일 읽기
# 파일 전체 읽기with open("data.txt", "r", encoding="utf-8") as f: content = f.read() print(content)
# 한 줄씩 읽기 (큰 파일에 유리)with open("data.txt", "r", encoding="utf-8") as f: for line in f: print(line.strip()) # 줄바꿈 제거with 문은 파일을 열고, 블록이 끝나면 자동으로 닫아줍니다. f.close()를 직접 호출할 필요가 없습니다. with를 쓰지 않으면 파일이 닫히지 않아 메모리 누수가 생길 수 있으므로 항상 with를 사용합니다.
파일 쓰기
# 새 파일 생성 (기존 내용 덮어쓰기)with open("output.txt", "w", encoding="utf-8") as f: f.write("첫 번째 줄\n") f.write("두 번째 줄\n")
# 기존 파일에 추가 (append)with open("output.txt", "a", encoding="utf-8") as f: f.write("추가된 줄\n")| 모드 | 의미 | 파일 없을 때 |
|---|---|---|
"r" | 읽기 전용 | 에러 |
"w" | 쓰기 (덮어쓰기) | 새로 생성 |
"a" | 추가 (이어쓰기) | 새로 생성 |
"x" | 생성 (이미 있으면 에러) | 새로 생성 |
실전 패턴 — CSV 직접 파싱
# CSV 파일을 직접 파싱 (라이브러리 없이)with open("scores.csv", "r", encoding="utf-8") as f: header = f.readline().strip().split(",") print(header) # ['이름', '국어', '영어', '수학'] for line in f: fields = line.strip().split(",") name = fields[0] total = sum(int(x) for x in fields[1:]) print(f"{name}: 총점 {total}")물론 실무에서는 csv 모듈이나 pandas를 쓰지만, 파일 입출력의 원리를 이해하면 어떤 형식의 데이터든 다룰 수 있습니다.
핵심 정리
문자열과 파일은 프로그래밍의 입출력 통로입니다. 외부 데이터를 읽어오고, 처리 결과를 저장하고, 사람이 읽을 수 있는 형태로 출력하는 모든 과정이 여기서 시작됩니다. split, join, f-string, with open — 이 네 가지를 손에 익히면 대부분의 텍스트 처리가 가능합니다.