-
os.makedirs() 함수란?pandas 2025. 7. 18. 09:56
os.makedirs()는 재귀적으로(recursively) 디렉터리(폴더)를 생성하는 함수입니다. 여기서 '재귀적'이라는 의미는, 지정한 경로에 필요한 모든 중간 디렉터리가 존재하지 않더라도 자동으로 생성해준다는 뜻입니다.
이는 단 하나의 디렉터리만 생성할 수 있는 os.mkdir() 함수와의 가장 큰 차이점입니다.
os.mkdir()와의 비교
이해를 돕기 위해 두 함수를 비교해 보겠습니다. project/assets/images 라는 경로를 만들고 싶다고 가정해 봅시다.
- os.mkdir("project/assets/images")
- project 디렉터리가 존재하고, 그 안에 assets 디렉터리가 존재할 때만 images 디렉터리를 생성할 수 있습니다.
- 만약 project나 assets 디렉터리가 없다면 FileNotFoundError가 발생합니다.
- os.makedirs("project/assets/images")
- 현재 위치에 project 디렉터리가 없으면 project를 만듭니다.
- 그 다음 project 안에 assets 디렉터리가 없으면 assets를 만듭니다.
- 마지막으로 assets 안에 images 디렉터리를 생성합니다.
- 즉, 경로 생성을 위해 필요한 모든 상위 디렉터리를 알아서 만들어줍니다.
기본 사용법 및 파라미터
Generated python
1. name (필수)
- 생성하고자 하는 디렉터리의 경로를 문자열 형태로 지정합니다.
- 상대 경로('data/images')와 절대 경로('/home/user/data/images') 모두 사용할 수 있습니다.
2. mode (선택)
- 디렉터리의 권한(permission)을 설정합니다. 8진수 형태로 지정합니다. (예: 0o777, 0o755)
- 기본값은 0o777이며, 시스템의 umask 값에 따라 실제 권한이 결정될 수 있습니다.
- Windows에서는 이 파라미터가 대부분 무시됩니다. 주로 Linux, macOS와 같은 Unix 기반 시스템에서 의미가 있습니다.
- 0o777: 모든 사용자(소유자, 그룹, 기타)에게 읽기, 쓰기, 실행 권한 부여
- 0o755: 소유자에게는 모든 권한, 그룹과 기타 사용자에게는 읽기 및 실행 권한 부여
3. exist_ok (선택, 매우 중요!)
- Python 3.2 버전부터 추가된 유용한 파라미터입니다.
- exist_ok=False (기본값): 만약 생성하려는 경로의 디렉터리가 이미 존재하면 FileExistsError 예외가 발생합니다.
- exist_ok=True: 생성하려는 경로의 디렉터리가 이미 존재하더라도 오류를 발생시키지 않고 조용히 넘어갑니다.
과거에는 디렉터리를 만들기 전에 if not os.path.exists(path): 와 같이 항상 존재 여부를 확인해야 했지만, exist_ok=True 옵션 덕분에 코드가 훨씬 간결해졌습니다.
사용 예제
예제 1: 기본적인 재귀적 생성
Generated python
import os # 현재 작업 디렉터리에 'data/raw/2023' 경로를 생성합니다. # 'data'와 'raw' 디렉터리가 없어도 자동으로 생성됩니다. try: path_to_create = 'data/raw/2023' os.makedirs(path_to_create) print(f"'{path_to_create}' 디렉터리가 성공적으로 생성되었습니다.") except FileExistsError: print(f"'{path_to_create}' 디렉터리는 이미 존재합니다.") # 실행 후 파일 탐색기에서 확인해보면 # data/ # └── raw/ # └── 2023/ # 와 같은 구조로 폴더가 생성된 것을 볼 수 있습니다.
예제 2: exist_ok=True 사용하기 (권장)
디렉터리가 있는지 없는지 신경 쓰지 않고, 그냥 "이 경로가 존재하도록 만들어줘"라는 의도일 때 매우 유용합니다.
Generated python
import os # 'logs/app' 경로가 존재하도록 보장하고 싶을 때 # 이미 존재하더라도 오류가 발생하지 않습니다. log_dir = 'logs/app' os.makedirs(log_dir, exist_ok=True) print(f"'{log_dir}' 경로가 준비되었습니다.")
이 코드는 여러 번 실행해도 아무런 오류 없이 항상 동일한 결과를 보장합니다.
예제 3: 권한(mode) 설정하기 (Linux/macOS)
Generated python
import os # 소유자만 읽고, 쓰고, 실행할 수 있는 디렉터리 생성 (rwx------) secure_dir = 'secure_data' os.makedirs(secure_dir, mode=0o700, exist_ok=True) print(f"보안 디렉터리 '{secure_dir}'가 준비되었습니다.")
주의사항 및 에러 처리
- FileExistsError: exist_ok=False일 때 대상 디렉터리가 이미 존재하면 발생합니다.
- PermissionError: 프로그램을 실행하는 사용자에게 해당 위치에 디렉터리를 생성할 권한이 없을 때 발생합니다. (예: 시스템 폴더에 생성 시도)
- 경로에 파일이 포함된 경우: os.makedirs('a/b.txt')와 같이 경로의 마지막 부분이 아닌 중간에 파일이 이미 존재한다면 ('a'는 디렉터리인데 'b.txt'가 파일인 경우), FileExistsError가 발생합니다.
요약: os.makedirs() vs os.mkdir()
구분 os.makedirs(path) os.mkdir(path) 기능 지정된 경로의 모든 중간 디렉터리를 자동으로 생성 지정된 경로의 단일 디렉터리만 생성 상위 디렉터리 존재하지 않아도 OK 반드시 존재해야 함 (없으면 FileNotFoundError) 이미 존재할 때 exist_ok=True로 오류 방지 가능 FileExistsError 발생 (항상 try-except나 os.path.exists로 확인 필요) 주 사용처 복잡한 디렉터리 구조를 한 번에 만들 때 단 하나의 폴더를 만들 때 결론적으로, 파일 처리나 데이터 관리 프로그램에서 특정 경로 구조를 확실하게 만들고 싶을 때는 os.mkdir()보다 **os.makedirs(path, exist_ok=True)**를 사용하는 것이 훨씬 안정적이고 편리합니다.
'pandas' 카테고리의 다른 글
os.mkdir()가 필요한 이유 (2) 2025.07.18 이스케이프 시퀀스(Escape Sequence)란? (4) 2025.07.17 파이썬 파일 경로 다루기: os.path.join(), os.listdir(), r'', 리스트 컴프리헨션 완벽 정리 (2) 2025.07.17 Pandas, 너 도대체 뭐니? (Series와 DataFrame 핵심만 콕콕!) (1) 2025.07.16 - os.mkdir("project/assets/images")