파일과 폴더를 관리하는 일은 반복적으로 발생하는 작업 중 하나입니다.
파이썬의 os와 shutil 모듈을 사용하면 파일 복사, 이동, 삭제와 같은 작업을 자동화하여 효율적으로 관리할 수 있습니다.
이번 글에서는 파일 및 폴더 관리 작업을 자동화하는 방법과 실습 예제를 소개합니다.
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 모듈을 사용하여 파일 및 폴더 관리 작업을 자동화하는 방법을 알아보았습니다.
이 스크립트는 반복적인 파일 정리 작업을 줄이고 효율성을 높이는 데 유용합니다.
실습을 통해 자신만의 파일 관리 프로그램을 구현해 보세요!