Skip to Content
💻 코리아IT아카데미 신촌 - 프로그래밍 학습 자료
Python 프로그래밍Unit 9: 파일 다루기Topic 4: 파일 정리 자동화

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