매일 업무를 시작하며 컴퓨터를 켜고 '다운로드' 폴더나 바탕화면을 열었을 때, 온갖 확장자의 파일과 보고서 문서들이 난잡하게 흩어져 있는 모습을 보면 한숨부터 나오곤 합니다.

주 단위나 월 단위로 파일들을 정리해보겠다고 마음먹지만, 엑셀 파일은 엑셀 폴더로, 이미지 파일은 이미지 폴더로, PDF는 PDF 폴더로 일일이 마우스 드래그를 하며 옮기는 작업은 귀찮고 손이 많이 가는 대표적인 단순 반복 업무입니다. 정리를 미루다 보면 결국 중요한 파일을 어디에 두었는지 찾지 못해 시간을 허비하는 일도 빈번하게 발생합니다.

저 역시 초보 시절, 다운로드 폴더에 파일 수백 개가 뒤섞여 있어 필요한 계약서 문서를 찾느라 30분 넘게 헤맸던 경험이 있습니다. 오늘은 파이썬의 내장 모듈인 os와 shutil을 활용해 지저분한 폴더 안의 파일들을 확장자나 생성 날짜별로 분류하고, 3초 만에 깔끔한 폴더 구조로 일괄 정리해 주는 파일 정리 자동화 스크립트 작성법을 정리해 드립니다.


1. 내 컴퓨터 파일 시스템 제어의 핵심: os와 shutil 모듈

파이썬에는 외부 설치(pip install) 없이 기본으로 포함되어 있는 강력한 파일 시스템 제어 라이브러리가 존재합니다.

  • os 모듈: 운영체제(Operating System)와 소통하며 폴더 경로 확인, 파일 목록 탐색, 새로운 폴더 생성, 파일 확장자 분리 등을 담당합니다.

  • shutil 모듈: 파일의 이동(Move), 복사(Copy), 삭제 등 실제 파일 객체를 다루는 고성능 파일 작업 모듈입니다.

이 두 가지 모듈을 결합하면 사람이 마우스 클릭과 드래그로 몇십 분 동안 해야 할 파일 이동 작업을 코드 몇 줄로 순식간에 끝낼 수 있습니다.


2. 폴더 내 파일 탐색과 확장자 분리 기본 테크닉

파일을 정리하기 전 가장 먼저 해야 할 일은 "해당 폴더에 어떤 파일들이 들어있는지 확인하고, 파일의 확장자가 무엇인지 알아내는 것"입니다.

Python
import os

# 정리하고자 하는 대상 폴더 경로 지정
target_dir = r"C:\Users\User\Downloads"

# 폴더 내 모든 파일 및 폴더 목록 가져오기
file_list = os.listdir(target_dir)

for file_name in file_list:
    # 파일 경로 전체 구하기
    full_path = os.path.join(target_dir, file_name)
    
    # 폴더가 아닌 '실제 파일'인 경우에만 작업 수행
    if os.path.isfile(full_path):
        # 파일 이름과 확장자 분리하기 (예: 'report', '.xlsx')
        name, ext = os.path.splitext(file_name)
        print(f"파일명: {name} | 확장자: {ext}")

코드의 핵심 포인트

  • os.path.join(): 운영체제별 경로 구분자(윈도우의 \, 맥의 /)를 신경 쓸 필요 없이 안전하게 전체 파일 경로를 합쳐주는 필수 메서드입니다.

  • os.path.splitext(): 파일 이름에서 확장자(.pdf, .png, .xlsx 등)를 알아서 분리해 줍니다. 점(.)을 포함한 소문자 확장자를 리턴하므로 이를 기준으로 정리를 시작합니다.


3. 실전 예제: 확장자별 자동 분류 및 이동 스크립트

이제 파일의 확장자에 따라 해당 폴더(예: 문서_Excel, 이미지_Files)를 자동으로 만들고, 파일을 옮겨주는 실전 자동화 프로그램을 완성해 보겠습니다.

Python
import os
import shutil

# 1. 정리할 폴더 경로 설정
target_dir = r"C:\Users\User\Downloads"

# 2. 확장자별 분류 기준 사전(Dictionary) 정의
extension_map = {
    "엑셀문서": [".xlsx", ".xls", ".csv"],
    "이미지": [".jpg", ".jpeg", ".png", ".gif"],
    "PDF문서": [".pdf"],
    "압축파일": [".zip", ".7z", ".rar"]
}

# 3. 폴더 내 파일 순회하며 정리 시작
for file_name in os.listdir(target_dir):
    full_path = os.path.join(target_dir, file_name)
    
    # 디렉토리(폴더)가 아닌 파일인 경우에만 처리
    if os.path.isfile(full_path):
        name, ext = os.path.splitext(file_name)
        ext = ext.lower()  # 대문자 확장자(.PNG 등) 대응을 위한 소문자 변환
        
        # 지정한 확장자 지도(Map)에서 카테고리 찾기
        moved = False
        for category, extensions in extension_map.items():
            if ext in extensions:
                # 이동할 목적지 폴더 경로 생성
                dest_dir = os.path.join(target_dir, category)
                
                # 목적지 폴더가 존재하지 않으면 자동으로 생성
                if not os.path.exists(dest_dir):
                    os.makedirs(dest_dir)
                
                # 파일 이동 실행
                shutil.move(full_path, os.path.join(dest_dir, file_name))
                print(f"[{category}] 폴더로 이동 완료: {file_name}")
                moved = True
                break
        
        # 분류되지 않은 기타 확장자는 '기타' 폴더로 이동
        if not moved and ext != "":
            etc_dir = os.path.join(target_dir, "기타")
            if not os.path.exists(etc_dir):
                os.makedirs(etc_dir)
            shutil.move(full_path, os.path.join(etc_dir, file_name))

print("모든 파일 정리 작업이 완료되었습니다!")


4. 파일 자동 정리 시 주의해야 할 안전 조치 2가지

파이썬의 파일 삭제나 이동 명령어는 윈도우의 '휴지통'을 거치지 않고 직접 작동하는 경우가 많기 때문에 코드 실행 전 반드시 체크해야 할 안전 조치가 있습니다.

1) 덮어쓰기 문제 예방

shutil.move()로 이동하려는 목적지 폴더에 이미 동일한 이름의 파일이 존재하면 기존 파일이 예고 없이 덮어씌워지며 소실될 수 있습니다.

이동 전 if os.path.exists(dest_file_path): 조건을 통해 파일 중복 여부를 체크하고, 중복 시 파일명 뒤에 날짜나 숫자를 붙여주는(report_1.xlsx) 예외 처리 로직을 추가하는 것이 안전합니다.

2) 테스트 폴더에서 사전 검증

처음 작성한 스크립트를 중요한 파일들이 가득한 실제 다운로드 폴더나 작업 폴더에 곧바로 적용하지 마세요. 반드시 임시 테스트 폴더(Test_Folder)를 하나 만들고, 가짜 파일 몇 개를 넣어 정상 작동하는지 확인한 후 본 폴더에 적용해야 사고를 막을 수 있습니다.


핵심요약

  • 파이썬 내장 모듈인 os와 shutil을 조합하면 내 컴퓨터 안의 지저분한 파일들을 손대지 않고 일괄 정리할 수 있습니다.

  • os.path.splitext()로 파일의 확장자를 추출하고, 사전(Dictionary) 구조를 활용해 카테고리별 목적지 폴더를 자동 생성하여 이동시킵니다.

  • 파일 이동 시 동일 파일명 덮어쓰기로 인한 데이터 손실을 방지하기 위해 중복 검사 로직을 포함하고, 사전 테스트 후 적용하는 것이 중요합니다.