본문 바로가기
카테고리 없음

파이썬으로 파일 및 폴더 관리 자동화하기 - os와 shutil 활용법

by 혜택보관소 2024. 11. 20.

파일과 폴더를 관리하는 일은 반복적으로 발생하는 작업 중 하나입니다.

파이썬의 osshutil 모듈을 사용하면 파일 복사, 이동, 삭제와 같은 작업을 자동화하여 효율적으로 관리할 수 있습니다.

 

이번 글에서는 파일 및 폴더 관리 작업을 자동화하는 방법과 실습 예제를 소개합니다.

파이썬 파일 폴더 관리 자동화

1. os 모듈과 shutil 모듈 소개

os 모듈은 운영 체제와 상호작용하여 파일 및 폴더 관련 작업을 수행할 수 있도록 해줍니다. shutil 모듈은 파일과 폴더를 복사하거나 이동하는 데 사용됩니다.

1.1 기본 설치

os와 shutil은 파이썬 표준 라이브러리로, 추가 설치 없이 바로 사용할 수 있습니다.

2. 파일 및 폴더 작업

파일 존재 여부 확인

import os

file_path = "example.txt"

if os.path.exists(file_path):
    print(f"{file_path} 파일이 존재합니다.")
else:
    print(f"{file_path} 파일이 존재하지 않습니다.")

위 코드는 파일이 존재하는지 확인하고 결과를 출력합니다. os.path.exists()를 사용하여 파일 또는 폴더의 존재 여부를 확인할 수 있습니다.

파일 복사

shutil.copy()를 사용하여 파일을 다른 위치로 복사할 수 있습니다.

import shutil

source = "example.txt"
destination = "backup/example.txt"

shutil.copy(source, destination)
print(f"{source} 파일이 {destination}으로 복사되었습니다.")

위 코드는 example.txt 파일을 backup 폴더로 복사합니다. 대상 폴더가 존재하지 않으면 먼저 생성해야 합니다.

파일 이동

shutil.move()를 사용하여 파일을 다른 위치로 이동할 수 있습니다.

# 파일 이동
shutil.move(source, destination)
print(f"{source} 파일이 {destination}으로 이동되었습니다.")

위 코드는 지정된 소스 파일을 대상 폴더로 이동합니다. 이동 후 원본 파일은 삭제됩니다.

파일 삭제

os.remove()를 사용하여 파일을 삭제할 수 있습니다.

# 파일 삭제
if os.path.exists(file_path):
    os.remove(file_path)
    print(f"{file_path} 파일이 삭제되었습니다.")
else:
    print(f"{file_path} 파일을 찾을 수 없습니다.")

폴더 작업

폴더 생성

os.makedirs()를 사용하여 중첩 폴더를 생성할 수 있습니다.

# 폴더 생성
folder_path = "backup/2024"
os.makedirs(folder_path, exist_ok=True)
print(f"{folder_path} 폴더가 생성되었습니다.")

exist_ok=True 옵션은 폴더가 이미 존재해도 오류가 발생하지 않도록 합니다.

폴더 삭제

shutil.rmtree()를 사용하여 폴더와 그 안의 모든 파일을 삭제할 수 있습니다.

# 폴더 삭제
if os.path.exists(folder_path):
    shutil.rmtree(folder_path)
    print(f"{folder_path} 폴더가 삭제되었습니다.")

파일 정리 자동화

다운로드 폴더를 파일 형식별로 정리하는 스크립트를 작성해 보겠습니다.

예제: 다운로드 폴더 정리

# 파일 형식별 폴더 정리
download_folder = "Downloads"
file_types = {
    "Images": [".jpg", ".png", ".gif"],
    "Documents": [".pdf", ".docx", ".txt"],
    "Videos": [".mp4", ".avi"],
}

for file_name in os.listdir(download_folder):
    file_path = os.path.join(download_folder, file_name)
    if os.path.isfile(file_path):
        for folder, extensions in file_types.items():
            if file_name.endswith(tuple(extensions)):
                destination_folder = os.path.join(download_folder, folder)
                os.makedirs(destination_folder, exist_ok=True)
                shutil.move(file_path, os.path.join(destination_folder, file_name))
                print(f"{file_name} 파일이 {folder} 폴더로 이동되었습니다.")

위 코드는 다운로드 폴더의 파일을 이미지, 문서, 비디오 등으로 분류하여 정리합니다.

전체 예제: 파일 백업 및 정리

특정 폴더의 모든 파일을 백업하고, 오래된 파일을 삭제하는 전체 스크립트를 작성해 보겠습니다.

전체 예제 코드

import os
import shutil
from datetime import datetime, timedelta

# 폴더 경로 설정
source_folder = "Documents"
backup_folder = "Backup"

# 백업 폴더 생성
os.makedirs(backup_folder, exist_ok=True)

# 파일 백업 및 오래된 파일 삭제
threshold_date = datetime.now() - timedelta(days=30)

for file_name in os.listdir(source_folder):
    file_path = os.path.join(source_folder, file_name)
    if os.path.isfile(file_path):
        # 파일 백업
        shutil.copy(file_path, os.path.join(backup_folder, file_name))
        print(f"{file_name} 파일이 백업되었습니다.")
        
        # 오래된 파일 삭제
        file_modified_time = datetime.fromtimestamp(os.path.getmtime(file_path))
        if file_modified_time < threshold_date:
            os.remove(file_path)
            print(f'{file_name} 파일이 삭제되었습니다.')

마무리

이번 글에서는 파이썬 os와 shutil 모듈을 사용하여 파일 및 폴더 관리 작업을 자동화하는 방법을 알아보았습니다.

이 스크립트는 반복적인 파일 정리 작업을 줄이고 효율성을 높이는 데 유용합니다.

실습을 통해 자신만의 파일 관리 프로그램을 구현해 보세요!