Python에서 디렉토리가 없으면 자동으로 생성하는 방법
파일이나 데이터를 저장할 때 대상 디렉토리가 미리 존재하지 않아 오류가 발생하는 경우가 많습니다. 이 글에서는 Python으로 디렉토리의 존재 여부를 확인한 뒤, 없을 때만 새로 생성하는 다양한 방법을 소개합니다.
방법 1: os.path.exists()로 확인 후 생성
가장 직관적인 방법은 os.path.exists() 함수로 디렉토리가 이미 있는지 먼저 확인하고, 존재하지 않을 때 os.makedirs()를 호출하는 것입니다.
import os
if not os.path.exists('my_folder'):
os.makedirs('my_folder')
os.makedirs()는 중간 경로의 상위 디렉토리까지 한 번에 생성해 주기 때문에, 단일 폴더뿐 아니라 중첩된 경로를 만들 때도 유용합니다.
방법 2: EAFP 스타일 — try/except 활용
Python 커뮤니티에서 선호되는 관용구 중 하나인 EAFP(Easier to Ask Forgiveness than Permission, 허락보다 용서가 쉽다) 방식도 있습니다. 이 방식은 디렉토리 존재 여부를 미리 검사하지 않고, 일단 생성을 시도한 후 예외가 발생하면 처리하는 접근입니다.
import os
import errno
try:
os.makedirs('my_folder')
except OSError as e:
if e.errno != errno.EEXIST:
raise
디렉토리가 이미 존재해서 발생하는 EEXIST 오류는 무시하고, 그 외의 오류는 다시 raise하여 전파합니다. 확인과 생성 사이에 다른 프로세스가 개입하는 경쟁 상태(race condition)를 피할 수 있다는 장점이 있습니다.
방법 3: pathlib 사용 (Python 3.5 이상 권장)
최신 Python에서는 객체 지향적인 pathlib 모듈을 사용하는 것이 가장 간결합니다. exist_ok=True 옵션 하나로 디렉토리가 이미 있어도 오류 없이 처리됩니다.
from pathlib import Path
Path('my_folder').mkdir(parents=True, exist_ok=True)
parents=True는 필요한 상위 디렉토리까지 모두 생성하며, exist_ok=True는 디렉토리가 이미 존재하는 경우 예외를 발생시키지 않습니다. 별도의 조건문이나 try/except 없이 한 줄로 해결되기 때문에 가장 권장되는 방식입니다.
마무리
세 가지 방법을 정리하면 다음과 같습니다.
- 전통적인 방식:
os.path.exists()로 확인 후os.makedirs()호출 - EAFP 방식: try/except로 예외를 처리하며 경쟁 상태 방지
- 현대적 방식:
pathlib.Path.mkdir(parents=True, exist_ok=True)한 줄로 해결
새 프로젝트를 시작한다면 가독성과 안전성 면에서 pathlib 기반 방식을 사용하는 것이 좋습니다.