Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 디렉토리가 존재하지 않을 때 자동으로 생성하는 방법

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 기반 방식을 사용하는 것이 좋습니다.