안녕하세요.
오늘은 경로를 문자열이 아닌 객체로 다루는 pathlib.Path가 어떻게 동작하는지 살펴보겠습니다.
pathlib
과거에 경로는 문자열(String)로 다뤘지만, 파이썬 3.4부터 표준 라이브러리로 도입된 pathlib은 파일 시스템 경로를속성과 기능(메서드)을 가진 객체(Object)로 다룹니다.
pathlib의 핵심 클래스는 바로 Path입니다.
우리가 파일 경로를 Path 객체로 만드는 순간, 파이썬은 이 경로를 단순한 글자가 아니라 운영체제 파일 시스템과 상호작용할 수 있는 객체로 인식합니다.
from pathlib import Path
# 현재 작업 경로를 객체로 생성
p = Path.cwd()
print(type(p))
결과 (윈도우)
<class 'pathlib._local.WindowsPath'>
리눅스의 경우 : <class 'pathlib.PosixPath'> 와 같이 출력됩니다.
위와 같이, 개발자가 OS를 신경 쓰지 않아도 실행하는 운영체제에 따라 알맞은 클래스(WindowsPath 또는 PosixPath)가 자동으로 할당됩니다.
Path 객체의 특징
1. 나눗셈 기호인 슬래시(/)를 경로 구분자로 사용
연산자 오버로딩(Operator Overloading) 을 지원하여, 나눗셈 기호인 슬래시(/)를 경로 구분자로 사용할 수 있습니다.
그래서 터미널에서 경로를 입력하듯이 직관적으로 코드를 짤 수 있습니다.
from pathlib import Path
# 기본 경로 객체 생성
base_path = Path("C:/Users/Data")
# 문자열을 더하듯, 경로 객체에 하위 폴더를 계속 이어 붙임
full_path = base_path / "2025" / "reports" / "final.csv"
print(full_path)
결과 (윈도우)
C:\Users\Data\2025\reports\final.csv
2. 문자열 파싱 없이 정보 추출
경로가 '객체'라는 말은, 자신에 대한 정보를 이미 알고 있다는 뜻입니다.
문자열을 쪼개고 자를 필요 없이, 객체의 속성(Attribute)만 호출하면 됩니다.
예를 들어, /home/user/photos/vacation.jpg라는 경로가 있다면 Path 객체는 이를 다음과 같이 관리합니다.
from pathlib import Path
file_path = Path("/home/user/photos/vacation.jpg")
# 1. 파일 이름 전체 (name)
print(f"파일명: {file_path.name}")
# 2. 확장자를 뺀 순수 이름 (stem)
print(f"순수 이름: {file_path.stem}")
# 3. 확장자 (suffix)
print(f"확장자: {file_path.suffix}")
# 4. 부모 폴더 경로 (parent)
print(f"상위 폴더: {file_path.parent}")
결과
파일명: vacation.jpg
순수 이름: vacation
확장자: .jpg
상위 폴더: \home\user\photos
4. 파일 시스템과의 상호작용 할 수 있는 다양한 Methods
Path 객체는 단순히 이름만 저장하는 게 아니라, 실제 파일 시스템에 명령을 내릴 수 있는 다양한 메서드(Method)를 가지고 있습니다.
상태 확인 및 탐색
p = Path("example_folder")
# 존재 여부 확인
if p.exists():
print("경로가 존재합니다.")
# 폴더인지 파일인지 확인
print(p.is_dir()) # 폴더인가?
print(p.is_file()) # 파일인가?
# 특정 패턴의 파일 찾기 (glob)
# 예: 폴더 내의 모든 .py 파일 찾기
for python_file in p.glob("*.py"):
print(python_file.name)
파일/폴더 생성 및 삭제
new_folder = Path("data/logs")
# 폴더 만들기 (parents=True: 중간 경로가 없으면 자동 생성)
new_folder.mkdir(parents=True, exist_ok=True)
# 파일 이름 변경 (이동)
original = Path("old_name.txt")
target = Path("new_name.txt")
original.rename(target)
5. 간편한 입출력 (I/O)
간단한 텍스트 파일을 읽고 쓸 때, open() 컨텍스트 매니저(with open...)를 여는 것조차 번거로울 때가 있습니다.
Path 객체는 이를 위한 숏컷 메서드를 제공합니다.
다만, 대용량 파일은 기존처럼 open()을 사용하는 것이 좋습니다.
memo = Path("memo.txt")
# 텍스트 쓰기
memo.write_text("이것은 pathlib 테스트입니다.", encoding="utf-8")
# 텍스트 읽기
content = memo.read_text(encoding="utf-8")
print(content)
'Python' 카테고리의 다른 글
| [Python] heapq 활용해 정렬 및 최소값 찾기 (0) | 2025.12.01 |
|---|---|
| [Python] 왈러스 연산자(:=) (0) | 2025.11.27 |
| [Python] is와 ==의 차이 (0) | 2025.11.26 |
| [Python] uuid로 고유한 식별자(Unique ID) 만들기 (0) | 2025.11.25 |
| [Python] isinstance()로 변수 타입 확인하기 (0) | 2025.11.23 |