파일 입출력과 경로 처리는 대부분의 프로그램에서 필요합니다. 이 치트시트는 pathlib 경로 다루기, encoding 명시, 텍스트/바이너리 모드의 핵심 패턴과 OS별 함정을 정리합니다.
언제 이 치트시트를 보나?
- 경로 join/정규화 때문에 OS별 버그가 날 때
- “왜 한글이 깨지지?” 같은 encoding 문제가 생길 때
핵심 패턴
- 경로는
pathlib.Path로 처리(문자열 join 지양) - 텍스트 파일은
encoding="utf-8"를 명시하는 습관 - CSV 등은
newline=""를 요구하는 경우가 있음(다음 챕터 참고) - 자원 관리는
with open(...) as f:로
최소 예제
1
2
3
4
| from pathlib import Path
p = Path("data") / "input.txt"
print(p.exists())
|
1
2
3
| # 텍스트 읽기
with open("data.txt", "r", encoding="utf-8") as f:
text = f.read()
|
1
2
3
4
5
| # 라인 단위 처리(메모리 절약)
with open("data.txt", "r", encoding="utf-8") as f:
for line in f:
line = line.rstrip("\n")
# process line
|
1
2
3
4
| # 바이너리 읽기
with open("image.png", "rb") as f:
blob = f.read(16)
print(blob)
|
1
2
3
4
5
6
| # pathlib로 glob
from pathlib import Path
root = Path(".")
for md in root.rglob("*.md"):
pass
|
자주 하는 실수/주의점
- Windows에서 역슬래시/이스케이프 문제 → 문자열로 경로 조합하지 말고
Path 사용 - encoding을 안 적으면 환경마다 기본값이 달라 깨질 수 있음 →
utf-8 명시 - 큰 파일을
read()로 한 번에 읽지 말고 라인/청크 단위로 처리
관련 링크(공식 문서)