핵심 요약: Python의 os.mkdir() 메서드는 파일 시스템에 빈 디렉터리 하나를 생성합니다. 단, 상위 폴더가 존재하지 않으면 사용할 수 없습니다. 반면 os.makedirs() 메서드는 존재하지 않는 상위 폴더까지 재귀적으로 한 번에 생성해 줍니다.
파일을 활용하면 프로그램 외부에 데이터를 저장하고, 나중에 프로그램에서 다시 참조할 수 있습니다. 파일을 다루다 보면 새로운 데이터를 저장할 전용 디렉터리를 만들어야 하는 경우가 자주 생깁니다.
이럴 때 바로 Python의 os 모듈이 유용합니다. os 모듈에는 디렉터리를 생성할 수 있는 os.mkdir()과 os.makedirs() 두 가지 메서드가 포함되어 있습니다.
이 글에서는 이 두 메서드를 사용해 Python에서 디렉터리를 생성하는 방법을 실제 예제와 함께 자세히 살펴보겠습니다.
Python os 모듈 복습
Python에서 파일 시스템 작업을 하려면 먼저 os 모듈을 임포트해야 합니다. os 모듈은 Python에 기본으로 내장되어 있으며, 컴퓨터의 운영체제와 상호작용할 수 있는 다양한 메서드를 제공합니다.
여기서는 그중 파일 시스템 관련 메서드를 사용할 것입니다. 아래처럼 import 문으로 간단히 불러올 수 있습니다:
import os
Python으로 단일 디렉터리 생성하기
os.mkdir() 메서드는 디렉터리 하나를 생성할 때 사용합니다. 예를 들어, 프로그램의 출력 결과를 저장할 새 폴더가 필요하다면 이 메서드를 활용하면 됩니다.
os.mkdir()의 기본 문법은 다음과 같습니다:
os.mkdir(path, access)
이 메서드는 두 개의 매개변수를 받습니다:
- path: 생성하려는 디렉터리의 경로 (필수)
- access: 디렉터리에 부여할 접근 권한 (선택)
os.mkdir() 기본 예제
실제 예제를 통해 os.mkdir() 메서드의 사용법을 확인해 보겠습니다.
수학 학생들의 시험 점수를 분석하는 프로그램을 만든다고 가정해 봅시다. 이 프로그램은 각 학생이 최근 시험에 합격했는지 여부를 저장합니다.
먼저 데이터를 저장할 디렉터리를 생성해야 합니다. 이렇게 하면 데이터가 프로그램의 다른 파일들과 분리되어 체계적으로 관리됩니다.
데이터 저장용 디렉터리를 만드는 코드는 다음과 같습니다:
import os
path = "/home/school/math/grades/final"
os.mkdir(path)
print("/home/school/math/grades/final has been created.")
이 코드는 운영체제의 /home/school/math/grades 폴더 안에 final이라는 새 디렉터리를 생성하고, 다음 메시지를 출력합니다:
/home/school/math/grades/final has been created.
주의할 점: mkdir() 메서드는 한 번에 하나의 디렉터리만 생성할 수 있습니다. 즉, final 폴더를 만든 후 그 안에 jan2020 같은 하위 폴더를 동시에 생성하는 것은 불가능합니다. 상위 폴더가 이미 존재하지 않으면 FileNotFoundError 오류가 발생합니다.
os.mkdir() 권한 설정 예제
선택적 매개변수인 access를 사용하면 디렉터리의 접근 권한을 직접 지정할 수 있습니다. 기본값은 777로, 소유자와 모든 사용자가 읽고 쓸 수 있는 권한을 의미합니다.
그렇다면 직접 권한을 설정하고 싶을 때는 어떻게 해야 할까요?
예를 들어, 운영체제를 여러 교사가 함께 사용하지만 쓰기 권한은 소유자에게만 부여하고 싶다고 가정해 봅시다. 이 경우 755 권한을 사용하면 됩니다. 755 권한은 모든 사용자가 파일을 읽고 접근할 수 있지만, 쓰기는 소유자만 가능하다는 의미입니다.
사용자 지정 권한으로 작업 디렉터리를 생성하는 코드는 다음과 같습니다:
import os
path = "/home/school/math/grades/final"
access = 0o755
os.mkdir(path, access)
print("/home/school/math/grades/final has been created.")
이 코드는 /home/school/math/grades/final 디렉터리를 755 권한으로 생성합니다. 따라서 모든 사용자가 해당 폴더를 읽을 수 있지만, 쓰기는 소유자만 가능합니다. 실행 결과는 다음과 같습니다:
/home/school/math/grades/final has been created.
중요: 코드에서 access 변수 값이 0o755인 점에 주목하세요. 접근 권한은 8진수(octal)로 표현되기 때문에, 권한 값 앞에 반드시 0o 접두사를 붙여야 합니다.
Python으로 여러 디렉터리 한 번에 생성하기
Python의 os.makedirs() 메서드는 폴더를 재귀적으로 생성합니다. 존재하지 않는 상위 폴더 안에 새 폴더를 만들어야 할 때 이 메서드를 사용하면 됩니다. os.makedirs()는 생성하려는 폴더의 경로를 인자로 받습니다.
os.makedirs()의 문법은 다음과 같습니다:
os.makedirs(path, access)
이 메서드는 os.mkdir()과 동일한 인자를 받습니다.
os.makedirs() 예제
새로 만드는 디렉터리 안에 또 다른 새 디렉터리를 생성해야 하는 경우가 종종 있습니다.
예를 들어, 수학 시험 점수 데이터를 저장하는 프로그램을 만든다고 가정해 봅시다. 모든 데이터를 하나의 폴더에 넣는 대신, 여러 폴더로 나눠 저장할 수도 있습니다.
각 폴더는 시험이 치러진 연도와 월에 대응하도록 구성하면, 나중에 특정 데이터를 찾아볼 때 훨씬 편리합니다.
학교 수학 시험 예제를 통해 os.makedirs() 메서드가 어떻게 작동하는지 살펴보겠습니다.
프로그램 요구 사항이 변경되어, 이제 시험의 연도와 월에 따라 데이터를 폴더별로 저장하려고 합니다. 다음 코드로 이 작업을 수행할 수 있습니다:
import os
path = "/home/school/math/grades/2020/02"
access = 0o755
os.makedirs(path, access)
print("/home/school/math/grades/2020/02 has been created.")
2020 폴더와 02 폴더가 아직 없다고 가정해 봅시다. 이 코드는 먼저 2020 폴더를 생성한 뒤, 그 안에 02 폴더를 생성합니다. 두 폴더 모두 755 접근 권한이 부여됩니다.
폴더 생성이 완료되면 프로그램은 다음 메시지를 출력합니다:
/home/school/math/grades/2020/02 has been created.
참고: 위 예제처럼 존재하지 않는 상위 폴더(2020)까지 함께 만들어야 한다면 반드시 os.makedirs()를 사용해야 합니다. os.mkdir()을 사용하면 상위 폴더가 없다는 오류가 발생합니다.
마무리
파일을 다룰 때 디렉터리 생성은 Python에서 매우 흔한 작업입니다. os.mkdir() 메서드는 단일 디렉터리를 생성하는 데 사용하고, os.makedirs() 메서드는 여러 단계로 중첩된 디렉터리를 한 번에 생성하는 데 사용합니다.
이 글에서는 두 메서드를 사용해 Python에서 폴더를 생성하는 방법을 알아보았고, 각 메서드의 실제 동작 예제도 함께 살펴보았습니다.
추가로, 파일이나 디렉터리가 존재하는지 확인하는 방법이 궁금하다면 os.path.exists() 함수를 활용해 보세요. 이를 통해 디렉터리 생성 시 발생할 수 있는 중복 오류를 미리 방지할 수 있습니다.