ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    import os
    
    os.makedirs(name, mode=0o777, exist_ok=False)
     
    Use code with caution.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/
    # 와 같은 구조로 폴더가 생성된 것을 볼 수 있습니다.
     
    Use code with caution.Python

    예제 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}' 경로가 준비되었습니다.")
     
    Use code with caution.Python

    이 코드는 여러 번 실행해도 아무런 오류 없이 항상 동일한 결과를 보장합니다.

    예제 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}'가 준비되었습니다.")
     
    Use code with caution.Python

    주의사항 및 에러 처리

    • 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)**를 사용하는 것이 훨씬 안정적이고 편리합니다.

Designed by Tistory.