[자동화#2] 폴더에서 특정 확장자만 모으기 (문서/사진 분류 자동화)
한줄 요약:
사진, 문서, 동영상이 뒤섞인 폴더…
파이썬으로 확장자별 파일을 자동으로 한 폴더에 쏙! 📁✨
1. 목표
- 폴더 안의 파일 중 특정 확장자(.jpg, .png, .pdf 등) 만 찾아서
다른 폴더로 자동 복사하거나 이동 - 대량 파일 정리에 탁월한 자동화 루틴
2. 완성 코드 (복붙)
# 특정 확장자 파일만 모으기
import os
import shutil
def collect_files(src_folder, dst_folder, extensions, move=False):
"""
src_folder : 원본 폴더
dst_folder : 대상 폴더
extensions : 찾을 확장자 리스트 (예: ['.jpg', '.png'])
move : True면 이동, False면 복사
"""
if not os.path.exists(dst_folder):
os.makedirs(dst_folder)
count = 0
for root, _, files in os.walk(src_folder):
for file in files:
ext = os.path.splitext(file)[1].lower()
if ext in extensions:
src = os.path.join(root, file)
dst = os.path.join(dst_folder, file)
if move:
shutil.move(src, dst)
else:
shutil.copy2(src, dst)
count += 1
print(f"{file} {'이동' if move else '복사'} 완료")
print(f"\n✅ 총 {count}개 파일 {'이동' if move else '복사'} 완료!")
# 사용 예시
if __name__ == "__main__":
src = input("정리할 폴더 경로: ")
dst = input("모을 대상 폴더 경로: ")
exts = input("확장자 입력 (예: jpg,png,pdf): ").split(",")
exts = [f".{e.strip().lower()}" for e in exts]
move_choice = input("파일을 이동하시겠습니까? (y/n): ").lower() == "y"
collect_files(src, dst, exts, move_choice)
3. 사용 방법
1️⃣ 위 코드를 collect_files.py로 저장
2️⃣ 터미널에서 실행
python collect_files.py
3️⃣ 입력 예시:
정리할 폴더 경로: C:\Users\Gaon\Downloads
모을 대상 폴더 경로: C:\Users\Gaon\Pictures\정리된사진
확장자 입력 (예: jpg,png,pdf): jpg,png
파일을 이동하시겠습니까? (y/n): n
🪄 결과:
IMG_001.jpg 복사 완료
photo2.png 복사 완료
✅ 총 2개 파일 복사 완료!
4. 주요 포인트
| 기능 | 설명 |
|---|---|
os.walk() | 하위 폴더까지 모두 탐색 |
os.path.splitext() | 확장자 분리 |
shutil.copy2() | 메타데이터 유지 복사 |
shutil.move() | 파일 이동 |
os.makedirs() | 대상 폴더 없으면 자동 생성 |
5. 예시 구조
실행 전:
Downloads/
├── IMG_001.jpg
├── photo.png
├── report.pdf
└── video.mp4
실행 후 (jpg, png만 모으기):
정리된사진/
├── IMG_001.jpg
└── photo.png
🧩 응용 예제 1: 문서만 분류
collect_files("C:/Users/Docs", "C:/Users/Documents", [".pdf", ".docx"])
🧩 응용 예제 2: 사진만 이동
collect_files("C:/Camera", "C:/Photos", [".jpg", ".png"], move=True)
6. 주의사항
| 상황 | 문제 | 해결 |
|---|---|---|
| 같은 이름 파일 | 덮어쓰기 발생 | 이름 중복 처리 추가 필요 (os.path.exists() 확인) |
| 경로 한글 깨짐 | Windows 경로 문제 | r"경로" 형태로 입력 |
| 폴더 크기 큼 | 복사 오래 걸림 | 이동 모드(move=True)로 실행 |
7. 연습문제
1️⃣ .mp4와 .avi 동영상만 videos/ 폴더로 모으기
2️⃣ 복사 대신 이동 모드로 동작하도록 수정
3️⃣ 파일 이름 중복 시 _1, _2를 붙이는 기능 추가해보기
이전 강좌 👈 [자동화#1] 파일 이름 일괄 변경 (사진 정리 필수 루틴)
다음 강좌 👉 [자동화#3] CSV 파일 한 번에 합치기 (엑셀 자동 통합 루틴)