Topic 4: 파일 정리 자동화 🗂️
🎯 학습 목표
파이썬으로 파일과 폴더를 자동으로 관리하는 방법을 배워요!
- os 모듈로 파일 시스템 다루기
- 파일 이동, 복사, 삭제하기
- 실용적인 자동화 프로그램 만들기
📂 os 모듈 소개
os
모듈은 운영체제와 상호작용할 수 있게 해줘요!
import os
# 현재 작업 디렉토리 확인
current_dir = os.getcwd()
print(f"현재 위치: {current_dir}")
# 디렉토리의 파일 목록 보기
files = os.listdir()
print(f"파일 목록: {files}")
🔍 파일과 폴더 확인하기
경로 다루기
import os
# 파일/폴더 존재 확인
if os.path.exists("data.txt"):
print("data.txt 파일이 있어요!")
# 파일인지 폴더인지 확인
if os.path.isfile("data.txt"):
print("이것은 파일이에요!")
elif os.path.isdir("data.txt"):
print("이것은 폴더에요!")
# 파일 크기 확인
size = os.path.getsize("data.txt")
print(f"파일 크기: {size} 바이트")
폴더 만들기
import os
# 폴더 만들기
folder_name = "새폴더"
if not os.path.exists(folder_name):
os.makedirs(folder_name)
print(f"{folder_name}를 만들었어요!")
else:
print(f"{folder_name}가 이미 있어요!")
🚀 파일 이동과 복사
shutil 모듈 사용하기
import shutil
import os
# 파일 복사
shutil.copy("원본.txt", "복사본.txt")
print("파일을 복사했어요!")
# 파일 이동 (잘라내기)
shutil.move("old_name.txt", "new_name.txt")
print("파일을 이동했어요!")
# 폴더 전체 복사
shutil.copytree("원본폴더", "복사폴더")
print("폴더를 통째로 복사했어요!")
💪 실용적인 예제
1. 파일 확장자별로 정리하기
import os
import shutil
def organize_files_by_extension(folder_path="."):
"""파일을 확장자별로 정리하는 함수"""
# 정리할 폴더로 이동
os.chdir(folder_path)
# 파일 목록 가져오기
files = [f for f in os.listdir() if os.path.isfile(f)]
# 확장자별로 분류
for file in files:
# 파일 이름과 확장자 분리
name, ext = os.path.splitext(file)
if ext: # 확장자가 있는 경우
# 확장자 이름으로 폴더 만들기 (. 제거)
folder_name = ext[1:].upper() + "_files"
# 폴더가 없으면 생성
if not os.path.exists(folder_name):
os.makedirs(folder_name)
print(f"📁 {folder_name} 폴더 생성")
# 파일 이동
try:
shutil.move(file, os.path.join(folder_name, file))
print(f"✅ {file} → {folder_name}로 이동")
except Exception as e:
print(f"❌ {file} 이동 실패: {e}")
print("\n정리 완료! 🎉")
# 사용 예시
organize_files_by_extension()
2. 날짜별 사진 정리하기
import os
import shutil
from datetime import datetime
def organize_photos_by_date(photo_folder="사진"):
"""사진을 날짜별로 정리하는 함수"""
if not os.path.exists(photo_folder):
print(f"{photo_folder} 폴더가 없어요!")
return
# 사진 확장자
photo_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp']
for file in os.listdir(photo_folder):
file_path = os.path.join(photo_folder, file)
# 파일인지 확인
if os.path.isfile(file_path):
# 확장자 확인
_, ext = os.path.splitext(file)
if ext.lower() in photo_extensions:
# 파일 수정 날짜 가져오기
timestamp = os.path.getmtime(file_path)
date = datetime.fromtimestamp(timestamp)
# 년-월 폴더명 만들기
folder_name = date.strftime("%Y년 %m월")
folder_path = os.path.join(photo_folder, folder_name)
# 폴더 생성
if not os.path.exists(folder_path):
os.makedirs(folder_path)
print(f"📅 {folder_name} 폴더 생성")
# 파일 이동
new_path = os.path.join(folder_path, file)
shutil.move(file_path, new_path)
print(f"📸 {file} → {folder_name}로 이동")
print("\n사진 정리 완료! 📷")
# 사용 예시
organize_photos_by_date()
3. 오래된 파일 정리하기
import os
import shutil
from datetime import datetime, timedelta
def cleanup_old_files(days=30, folder="다운로드"):
"""오래된 파일을 정리하는 함수"""
if not os.path.exists(folder):
print(f"{folder} 폴더가 없어요!")
return
# 오래된 파일 보관 폴더
archive_folder = os.path.join(folder, "오래된_파일")
if not os.path.exists(archive_folder):
os.makedirs(archive_folder)
# 기준 날짜 계산
cutoff_date = datetime.now() - timedelta(days=days)
moved_count = 0
for file in os.listdir(folder):
file_path = os.path.join(folder, file)
# 파일인지 확인 (폴더 제외)
if os.path.isfile(file_path):
# 파일 수정 시간 확인
timestamp = os.path.getmtime(file_path)
file_date = datetime.fromtimestamp(timestamp)
# 오래된 파일인지 확인
if file_date < cutoff_date:
new_path = os.path.join(archive_folder, file)
shutil.move(file_path, new_path)
moved_count += 1
print(f"📦 {file} 보관함으로 이동")
print(f"\n{moved_count}개의 파일을 정리했어요! 🧹")
# 사용 예시
cleanup_old_files(days=30)
🛡️ 안전한 파일 삭제
import os
import shutil
def safe_delete(file_path):
"""파일을 휴지통으로 이동하는 함수"""
if not os.path.exists(file_path):
print("파일이 없어요!")
return
# 휴지통 폴더 만들기
trash_folder = "휴지통"
if not os.path.exists(trash_folder):
os.makedirs(trash_folder)
# 파일명이 중복되면 번호 붙이기
file_name = os.path.basename(file_path)
trash_path = os.path.join(trash_folder, file_name)
counter = 1
while os.path.exists(trash_path):
name, ext = os.path.splitext(file_name)
trash_path = os.path.join(trash_folder, f"{name}_{counter}{ext}")
counter += 1
# 파일 이동
shutil.move(file_path, trash_path)
print(f"🗑️ {file_name}을(를) 휴지통으로 이동했어요!")
# 사용 예시
safe_delete("삭제할파일.txt")
💡 퀴즈: 파일 자동화 이해도 체크
Q1. os.path.exists()와 os.path.isfile()의 차이는?
💡 정답 확인
정답:
os.path.exists()
: 파일이나 폴더가 존재하는지 확인os.path.isfile()
: 파일인지 확인 (폴더는 False)
# "data"라는 폴더가 있을 때
os.path.exists("data") # True (존재함)
os.path.isfile("data") # False (파일이 아님)
os.path.isdir("data") # True (폴더임)
Q2. shutil.copy()와 shutil.move()의 차이는?
💡 정답 확인
정답:
shutil.copy()
: 파일을 복사 (원본 유지)shutil.move()
: 파일을 이동 (원본 삭제)
Windows의 복사(Ctrl+C) vs 잘라내기(Ctrl+X)와 같아요!
✅ 파일 정리 자동화 마스터 체크리스트
✅ 파일 정리 자동화 마스터 체크리스트
🚀 다음 단계
파일 다루기를 모두 마스터했어요! 🎉
이제 여러분은:
- 텍스트 파일을 읽고 쓸 수 있어요
- CSV로 데이터를 관리할 수 있어요
- 파일을 자동으로 정리할 수 있어요
다음 유닛에서는 모듈과 패키지를 배워서 더 체계적인 프로그램을 만들어볼게요!
Last updated on