Python

pathlib.Path

pathlib.Path에 대해서 설명한다.

pathlib.Path

Path란?

파일 경로나 폴더 경로를 문자열보다 편하게 다루기 위한 도구이다.

기존 방식

folder = "data"
file_name = "input.txt"

file_path = folder + "/" + file_name

하지만 Path를 사용하면

from pathlib import Path

folder = Path("data")
file_path = folder / "input.txt" # data/input.txt 가 만들어진다.

자주 쓰는 기능

기능 의미
Path("경로") 경로 객체 만들기
folder / "file.txt" 경로 합치기
path.exists() 존재 여부 확인
path.is_file() 파일인지 확인
path.is_dir() 폴더인지 확인
path.mkdir() 폴더 만들기
path.name 파일명
path.stem 확장자 뺀 파일명
path.suffix 확장자
path.parent 상위 폴더
path.read_text() 텍스트 읽기
path.write_text() 텍스트 쓰기
path.glob("*.png") 패턴으로 파일 찾기
path.rglob("*.py") 하위 폴더까지 파일 찾기
path.resolve() 절대경로 확인
Path.cwd() 현재 실행 폴더
path.unlink() 파일 삭제
path.iterdir() 폴더 안 목록 보기

.mkdir()

폴더를 만드는 기능이다.

folder = Path("outputs")
folder.mkdir()

그런데 이미 outputs 폴더가 있으면 에러가 날 수 있다.

그래서 보통 이렇게 많이 쓴다.

folder = Path("outputs/images")
folder.mkdir(parents=True, exist_ok=True)

parents=True 중간 폴더까지 같이 만들기

exist_ok=True 이미 있어도 에러 안 내기

outputs 폴더가 없는데 outputs/images를 만들려면 parents=True가 필요하다.


.read_text()

텍스트 파일을 읽어오는 기능이다.

path = Path("data/input.txt")

text = path.read_text(encoding="utf-8")
print(text)

기존 방식은 다음과 같다.

with open("data/input.txt", "r", encoding="utf-8") as f:
    text = f.read()

read_text()를 사용하면 기존 방식보다 짧게 텍스트 파일을 읽을 수 있다.

encoding="utf-8" 한글이 깨지지 않도록 인코딩 방식을 지정하기

한글이 포함된 텍스트 파일을 읽을 때는 encoding=”utf-8”을 함께 사용하는 것이 좋다.


.write_text()

텍스트 파일에 내용을 저장하는 기능이다.

path = Path("outputs/result.txt")

path.write_text("hello world", encoding="utf-8")

파일이 없으면 새로 생성하고, 이미 파일이 있으면 기존 내용을 덮어쓴다.

"hello world" 파일에 저장할 내용

encoding="utf-8" 한글이 깨지지 않도록 인코딩 방식을 지정하기

기존 파일이 있으면 내용이 덮어쓰기 되므로 주의해야 한다.


.glob()

현재 폴더에서 특정 패턴에 맞는 파일을 찾는 기능이다.

folder = Path("images")

for path in folder.glob("*.png"):
    print(path)

"*.png" 현재 폴더 안에 있는 모든 PNG 파일 찾기

예시는 다음과 같다.

images/frame001.png
images/frame002.png
images/frame003.png

glob()은 지정한 폴더의 바로 아래에 있는 파일들을 중심으로 탐색한다.


.rglob()

현재 폴더뿐만 아니라 하위 폴더까지 전부 탐색해서 특정 패턴에 맞는 파일을 찾는 기능이다.

folder = Path("project")

for path in folder.rglob("*.py"):
    print(path)

"*.py" 현재 폴더와 모든 하위 폴더에서 파이썬 파일 찾기

예시는 다음과 같다.

project/main.py
project/utils/parser.py
project/models/alignment.py

glob()은 현재 폴더 중심으로 탐색하고, rglob()은 하위 폴더까지 재귀적으로 탐색한다.


파일을 삭제하는 기능이다.

path = Path("outputs/temp.txt")
path.unlink()

파일이 없을 때 실행하면 에러가 날 수 있다.

그래서 보통 이렇게 확인하고 사용한다.

if path.exists():
    path.unlink()

unlink()는 폴더가 아니라 파일을 삭제할 때 사용한다.


.iterdir()

폴더 안에 있는 파일과 폴더 목록을 하나씩 확인하는 기능이다.

folder = Path("data")

for item in folder.iterdir():
    print(item)

예시는 다음과 같다.

data/input.txt
data/images
data/result.csv

iterdir()는 지정한 폴더 바로 아래에 있는 항목들을 확인할 때 사용한다.

Related records

읽던 위치가 있어요.
확대 이미지