Python으로 폴더를 쉽게 만들고 삭제하는 방법 | os 모듈과 pathlib 모듈 활용

1. Python으로 폴더를 생성하는 기본 방법

Python에는 표준 라이브러리를 사용하여 쉽게 폴더를 생성하는 방법이 있습니다. 주로 사용되는 것은 os 모듈입니다. 이 섹션에서는 os 모듈을 사용한 폴더 생성 방법에 대해 자세히 설명합니다.

Python으로 폴더를 생성하는 방법:os 모듈

os 모듈을 사용하면 프로그램 내에서 폴더를 생성할 수 있습니다. 이는 데이터를 정리하거나 로그를 저장하기 위한 디렉터리를 만들 때 등 유용합니다. 기본적인 폴더 생성 방법은 다음과 같습니다.
import os

# 생성할 폴더의 경로 지정
path = 'example_folder'

# 폴더 생성
os.mkdir(path)
이 코드에서는 os.mkdir() 함수를 사용하여 새로운 폴더「example_folder」를 생성합니다. 다만, 이 함수는 폴더가 이미 존재하는 경우 FileExistsError를 발생시킵니다.

다중 계층 폴더를 생성하는:os.makedirs()

단일 폴더뿐만 아니라 다중 계층 디렉터리를 한 번에 생성하고 싶을 때는 os.makedirs() 함수를 사용합니다.
import os

# 다중 계층 폴더 지정
path = 'example_folder/subfolder'

# 상위 디렉터리가 없어도 폴더 생성
os.makedirs(path)
이처럼 os.makedirs()를 사용하면 지정한 경로에 존재하지 않는 상위 디렉터리도 동시에 생성할 수 있습니다. 이를 통해 폴더 구조를 한 번에 만들 수 있는 편리함이 있습니다.

에러 처리:exist_ok=True 사용

이미 폴더가 존재하는 경우에도 에러를 발생시키지 않고 처리를 계속하고 싶을 때는 exist_ok=True 옵션을 사용합니다. 아래 예시와 같이 설정하면 폴더가 존재해도 에러가 발생하지 않습니다.
import os

path = 'example_folder/subfolder'

# 이미 폴더가 존재하는 경우에도 에러 무시
os.makedirs(path, exist_ok=True)
이를 통해 프로그램이 실행될 때마다 같은 폴더를 생성하려고 해도 에러가 발생하지 않아 견고한 코드를 작성할 수 있습니다.

2. Pathlib 모듈을 사용한 폴더 생성

Python 3.4 이후부터, pathlib 모듈이 표준 라이브러리에 추가되었습니다. 이 모듈은 객체 지향적으로 경로를 조작할 수 있으며, 직관적으로 폴더를 생성할 수 있습니다. 여기에서는 pathlib 모듈을 사용한 폴더 생성 방법을 설명합니다.

Pathlib 모듈 사용법

pathlib.Path()를 사용하면 디렉터리를 생성할 수 있습니다. os 모듈과 마찬가지로, exist_ok=True를 지정하면 기존 폴더가 있더라도 오류를 피할 수 있습니다.
from pathlib import Path

# 만들고자 하는 폴더의 경로 지정
path = Path('example_folder/subfolder')

# 폴더 생성
path.mkdir(parents=True, exist_ok=True)
이 코드에서는 parents=True를 지정함으로써, 상위 디렉터리가 존재하지 않아도 함께 생성됩니다. 통해 os.makedirs()와 동일한 동작을 구현할 수 있습니다.

Pathlib 모듈의 장점

pathlib 모듈의 큰 특징은 객체 지향적인 조작이 가능하다는 점 Path 객체를 사용하면 폴더 생성뿐만 아니라 경로 결합 및 파일 조작도 직관적으로 할 수 있습니다. 이를 통해 코드의 가독성과 유지보수성이 향상됩니다.
年収訴求

3. 폴더 생성에 대한 오류 처리

폴더를 생성할 때는 다양한 오류가 발생할 수 있습니다. 예를 들어 권한이 부족한 경우나 지정된 경로가 유효하지 않은 경우가 있습니다. 이 섹션에서는 오류 처리 구현 방법에 대해 설명합니다.

권한 오류 및 무효한 경로 처리

os.makedirs()pathlib.Path().mkdir()를 사용한 폴더 생성 시 발생하는 일반적인 오류에는 PermissionErrorFileNotFoundError가 있습니다. 이러한 오류를 적절히 처리함으로써 보다 견고한 프로그램을 만들 수 있습니다. 다음은 오류 처리 예시입니다.
import os

path = 'example_folder/subfolder'

try:
    os.makedirs(path, exist_ok=True)
    print(f'폴더 "{path}" 가 생성되었습니다.')
except PermissionError:
    print('폴더를 생성할 권한이 없습니다.')
except FileNotFoundError:
    print('지정된 경로가 유효하지 않습니다.')
except Exception as e:
    print(f'예기치 않은 오류가 발생했습니다: {e}')
이 코드에서는 일반적인 오류마다 각각의 처리 방법을 제시하고, 예기치 않은 오류에도 대응합니다. 이를 통해 프로그램이 중단되지 않고 오류가 적절히 처리됩니다.

보다 고급 오류 처리

폴더 생성이 실패할 가능성이 있는 경우에는 오류 내용을 로그에 기록하거나 사용자에게 알리는 방안을 고려해야 합니다. 특히 대규모 애플리케이션에서는 오류 처리가 사용자 경험에 큰 영향을 미치므로 충분한 대응이 요구됩니다.

4. 폴더 삭제 방법

폴더를 생성하는 것뿐만 아니라, 필요 없어지면 폴더를 삭제하는 경우도 자주 있습니다. Python에서는 표준 라이브러리의os 모듈과shutil 모듈을 사용하여 폴더 삭제를 수행할 수 있습니다. 여기서는 그 구체적인 방법에 대해 설명합니다.

os.rmdir()를 사용한 폴더 삭제

os 모듈에는 rmdir()라는 함수가 있어 폴더를 삭제할 수 있습니다. 다만, 이 함수는 삭제하려는 폴더가 비어 있어야 한다는 제한이 있습니다.
import os

# 삭제할 폴더의 경로를 지정
path = 'example_folder/subfolder'

# 폴더를 삭제
os.rmdir(path)
이 코드는 지정한 폴더가 비어 있는 경우에만 정상적으로 동작합니다. 폴더 안에 파일이나 다른 디렉터리가 존재하는 경우에는 OSError가 발생합니다.

shutil.rmtree()를 사용한 폴더의 재귀적 삭제

폴더 안에 파일이나 다른 서브 폴더가 존재하는 경우, shutil 모듈의 rmtree() 함수를 사용함으로써 폴더와 그 안의 내용을 재귀적으로 삭제할 수 있습니다.
import shutil

# 삭제할 폴더의 경로를 지정
path = 'example_folder/subfolder'

# 폴더와 그 안의 내용을 삭제
shutil.rmtree(path)
이 방법은 디렉터리가 비어 있지 않더라도 문제없이 폴더를 삭제할 수 있어 디렉터리 트리 전체를 삭제할 때 유용합니다. 다만, 삭제된 파일이나 폴더는 복구할 수 없으므로 신중하게 다룰 필요가 있습니다.

에러 핸들링

폴더 삭제 시에도 에러 핸들링이 중요합니다. 예를 들어, 삭제하려는 폴더에 대한 권한이 없거나 지정한 경로가 유효하지 않은 경우에는 오류가 발생합니다. 아래는 에러 핸들링을 포함한 코드 예시입니다.
import shutil

path = 'example_folder/subfolder'

try:
    shutil.rmtree(path)
    print(f'폴더 "{path}" 가 삭제되었습니다.')
except PermissionError:
    print('폴더를 삭제할 권한이 없습니다.')
except FileNotFoundError:
    print('지정된 폴더를 찾을 수 없습니다.')
except Exception as e:
    print(f'예기치 않은 오류가 발생했습니다: {e}')
이 코드에서는 삭제 시 발생하는 오류에 대응하고, 예기치 않은 오류에도 유연하게 대응합니다.

5. 실제 적용 사례

여기에서는 폴더 생성과 삭제를 결합하여 실제 프로젝트나 데이터 처리에 유용한 적용 사례를 소개합니다. 특히 연간 및 월간 데이터를 폴더별로 정리하는 경우 등을 가정하고 있습니다.

연월별 폴더 생성

예를 들어, 데이터를 연도별 또는 월별로 정리하고 싶을 경우 자동으로 폴더를 생성하는 스크립트를 만들 수 있습니다.
import os
from datetime import datetime

# 현재 연도와 월을 가져오기
current_year = datetime.now().year
current_month = datetime.now().month

# 폴더 경로 설정
folder_path = f'data/{current_year}/{current_month}'

# 폴더 생성
os.makedirs(folder_path, exist_ok=True)
print(f'폴더 "{folder_path}" 가 생성되었습니다.')
이 스크립트는 현재 연도와 월을 기반으로 자동으로 폴더를 생성하고, 데이터를 효율적으로 정리하는 데 도움이 됩니다.

폴더 일괄 삭제

특정 조건에 따라 불필요한 폴더를 일괄 삭제하고 싶을 경우에도 Python을 사용하여 효율적으로 처리할 수 있습니다. 예를 들어, 일정 기간 이상 지난 오래된 데이터 폴더를 삭제하는 스크립트를 만들 수 있습니다.
import shutil
import os
from datetime import datetime, timedelta

# 30일 전 날짜를 가져오기
threshold_date = datetime.now() - timedelta(days=30)

# 삭제할 폴더의 기준 경로
base_path = 'data/'

# 폴더를 확인하고 오래된 폴더를 삭제
for folder_name in os.listdir(base_path):
    folder_path = os.path.join(base_path, folder_name)
    if os.path.isdir(folder_path):
        folder_date = datetime.strptime(folder_name, '%Y-%m-%d')
        if folder_date < threshold_date:
            shutil.rmtree(folder_path)
            print(f'오래된 폴더 "{folder_path}" 가 삭제되었습니다.')
이러한 적용 사례에서는 프로그램을 사용하여 폴더 관리 및 정리를 자동화함으로써 수동 작업을 생략할 수 있습니다.

6. 요약

이 기사에서는 Python을 사용하여 폴더를 생성하고 삭제하는 방법에 대해 설명했습니다. os 모듈과 pathlib 모듈을 사용한 기본적인 조작 방법부터, 폴더 생성 시 오류 처리 및 실제 적용 사례까지 폭넓게 소개했습니다. 이러한 지식을 활용하면 데이터를 효율적으로 관리하는 프로그램을 만들 수 있게 됩니다. 다음 단계로는 폴더 생성 및 삭제에 더해 파일 조작 및 압축 등, 보다 고급 데이터 관리 기술도 배우는 것이 좋습니다.
侍エンジニア塾