pathlib 시작하기 — 객체 지향 경로 다루기
파이썬을 하다 보면 파일 경로나 디렉토리를 다루는 일이 아주 흔하죠. 로그를 저장하거나 설정 파일을 읽고 쓰거나, 데이터 파일을 정리하는 등 일상적인 작업입니다. 이런 작업들, 예전에는 os.path
나 glob
, shutil
같은 모듈을 여기저기 섞어 쓰며 처리했는데요, 이제는 그럴 필요 없습니다. 왜냐고요?
pathlib
이 있으니까요.
pathlib은 뭘까?
pathlib
은 파이썬 3.4부터 등장한 경로 처리 전용 객체지향 모듈이에요. 기존에는 파일 경로를 단순 문자열로 다뤘다면, pathlib
은 "경로 그 자체"를 하나의 객체로 다룹니다. 덕분에 경로를 연결하거나, 존재 여부를 확인하거나, 파일을 읽고 쓰는 작업이 훨씬 더 명확하고 읽기 쉬운 문법으로 바뀌었습니다.
from pathlib import Path
▶ 이 Path
클래스는 자동으로 여러분의 운영체제에 맞춰 PosixPath
(macOS/Linux) 또는 WindowsPath
로 동작합니다. 여러분이 어떤 OS를 쓰든 신경 쓸 필요 없다는 말이에요!
pathlib의 필수 기능과 예제
1. 경로 객체 생성
p = Path('data/example.txt')
print(p.resolve()) # 절대경로 반환
문자열 같아 보이지만, 이건 객체입니다. 다양한 메서드와 속성을 통해 경로를 유연하게 다룰 수 있습니다.
2. 경로 결합: /
연산자 사용
data_dir = Path('data')
file_path = data_dir / 'sample.txt'
슬래시 연산자 /
로 경로를 연결할 수 있다는 점이 매우 Pythonic 합니다. 문자열 덧셈보다 가독성과 안정성이 높습니다.
3. 경로 정보 추출
부모 디렉토리, 이름, 확장자 등 경로 구성요소 분리해낼 수 있는 점도 매우 편리합니다.
p = Path('data/sample.txt')
print(p.parent) # data
print(p.name) # sample.txt
print(p.stem) # sample
print(p.suffix) # .txt
4. 존재 여부 확인
결과를 불리언으로 반환합니다.
p.exists() # 존재 여부
p.is_file() # 파일인지?
p.is_dir() # 디렉토리인지?
5. 디렉토리 생성
p = Path('logs/2025/05')
p.mkdir(parents=True, exist_ok=True)
중첩 디렉터리까지 한 번에 생성 가능하며, 이미 존재해도 오류 없이 넘어갑니다.
6. 파일 읽고 쓰기
p = Path('output.txt')
p.write_text("Hello, World!")
text = p.read_text()
print(text)
바이너리 파일도 다룰 수 있습니다:
p.write_bytes(b'binary data')
data = p.read_bytes()
7. 파일/디렉토리 검색
print(list(Path('.').glob('*.py'))) # 현재 폴더의 .py 파일 목록
print(list(Path('.').rglob('*.py'))) # 하위 폴더까지 재귀 탐색
glob()
은 제너레이터를 반환하므로 리스트로 변환해서 확인하는 방식이 좋습니다.
8. 파일 삭제, 이동, 이름 변경
p.unlink() # 삭제
p.rename('newname') # 이름 변경 (같은 디렉토리 내에서)
p.replace('newpath') # 이동 및 덮어쓰기
rename()
은 대상 경로가 존재하면 실패할 수 있으므로, 덮어쓰기가 필요한 경우replace()
를 사용하세요. 복사 작업은shutil.copy()
를 사용해야 합니다.
os.path vs pathlib 비교
# os.path
import os
os.path.exists('foo/bar.txt')
# pathlib
Path('foo/bar.txt').exists()
- 코드가 훨씬 읽기 쉽고, 가독성도 좋습니다.
- 특히 리눅스 환경에서 자주 쓰는
cd
,ls
,mkdir
과 유사한 문법 구조로 친숙합니다.
왜 pathlib을 써야 할까?
- 문자열 대신 Path 객체로 구조적인 코드가 됩니다.
- 운영체제에 독립적인 경로 처리 (Windows vs POSIX)
os.path
,glob
,shutil
의 기능을 하나로 통합- 테스트 코드, 로깅, 에러 처리 등에서도 유지보수성 향상
마무리하며
Counter
, defaultdict
가 컬렉션 다루기를 더 우아하게 만들어줬듯이, pathlib
은 파일 경로를 다루는 방식을 완전히 바꿔놓습니다. 문자열 처리로 힘들었던 옛 시절은 이제 잊어도 좋습니다. 이 글에서 보여드린 예제들을 하나씩 직접 실행해 보세요. 생각보다 훨씬 빠르게 손에 익을 거예요.
다음 편에서는 shutil
을 통해 실제 파일 복사/백업을 자동화하는 고급 활용법을 다룰 예정입니다. 기대해 주세요!
이전글이 궁금하시면 아래의 링크를 클릭하여 확인할 수 있습니다.
Add a New Comment