[자동화#2] 폴더에서 특정 확장자만 모으기 (문서/사진 분류 자동화)

[자동화#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 파일 한 번에 합치기 (엑셀 자동 통합 루틴)

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.