파일과 폴더를 한곳에 몰아두다 보니 어떤 파일들이 있는지도 헷갈리고, 일일이 손으로 정리하기엔 너무 귀찮은 개발자라면 이 스크립트가 딱 맞을 것입니다. 아래에서 소개하는 파이썬 프로그램은 지정한 폴더 안의 모든 파일을 확장자별로 알맞은 하위 폴더에 단 한 번의 실행으로 분류하고, 빈 디렉터리까지 자동으로 삭제해 줍니다.
여러 종류의 파일이 뒤섞여 있는 하나의 디렉터리가 있다고 가정해 보겠습니다. 프로그램을 실행하면 각 파일이 자신의 확장자에 맞는 폴더로 깔끔하게 이동됩니다.
정리 전 폴더 구조

정리 후 목표 결과

1단계: 폴더별 확장자 목록 정의
먼저 파일을 분류할 폴더 이름과, 각 폴더로 옮길 확장자 목록을 딕셔너리 형태로 정의합니다. HTML, 이미지, 동영상, 문서, 압축 파일, 오디오 등 카테고리별로 확장자를 그룹화했습니다.
DIRECTORIES = {
"HTML": [".html5", ".html", ".htm", ".xhtml"],
"IMAGES": [".jpeg", ".jpg", ".tiff", ".gif", ".bmp", ".png", ".bpg", "svg",
".heif", ".psd"],
"VIDEOS": [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng",
".qt", ".mpg", ".mpeg", ".3gp"],
"DOCUMENTS": [".oxps", ".epub", ".pages", ".docx", ".doc", ".fdf", ".ods",
".odt", ".pwi", ".xsn", ".xps", ".dotx", ".docm", ".dox",
".rvg", ".rtf", ".rtfd", ".wpd", ".xls", ".xlsx", ".ppt",
"pptx"],
"ARCHIVES": [".a", ".ar", ".cpio", ".iso", ".tar", ".gz", ".rz", ".7z",
".dmg", ".rar", ".xar", ".zip"],
"AUDIO": [".aac", ".aa", ".aac", ".dvf", ".m4a", ".m4b", ".m4p", ".mp3",
".msv", "ogg", "oga", ".raw", ".vox", ".wav", ".wma"],
"PLAINTEXT": [".txt", ".in", ".out"],
"PDF": [".pdf"],
"PYTHON": [".py"],
"XML": [".xml"],
"EXE": [".exe"],
"SHELL": [".sh"]
}
2단계: 확장자-폴더 매핑과 정리 함수 작성
딕셔너리 컴프리헨션을 활용하면 위의 DIRECTORIES를 '확장자 → 폴더' 형태의 역방향 매핑(FILE_FORMATS)으로 손쉽게 변환할 수 있습니다. 이어서 실제 파일을 이동시키는 organise_folder() 함수를 작성합니다.
FILE_FORMATS = {file_format: directory
for directory, file_formats in DIRECTORIES.items()
for file_format in file_formats}
def organise_folder():
for entry in os.scandir():
if entry.is_dir():
continue
file_path = Path(entry)
file_format = file_path.suffix.lower()
if file_format in FILE_FORMATS:
directory_path = Path(FILE_FORMATS[file_format])
directory_path.mkdir(exist_ok=True)
file_path.rename(directory_path.joinpath(file_path))
try:
os.mkdir("OTHER-FILES")
except:
pass
for dir in os.scandir():
try:
if dir.is_dir():
os.rmdir(dir)
else:
os.rename(os.getcwd() + '/' + str(Path(dir)), os.getcwd() + '/OTHER-FILES/' + str(Path(dir)))
except:
pass
함수의 동작 방식
- 파일 순회: os.scandir()로 현재 디렉터리의 항목을 살펴보되, 폴더는 continue로 건너뜁니다.
- 확장자 확인: pathlib.Path의 suffix 속성으로 확장자를 얻고 lower()로 소문자화한 뒤, FILE_FORMATS에 등록된 확장자인지 검사합니다.
- 폴더 생성 및 이동: 대상 폴더가 없으면 mkdir(exist_ok=True)로 새로 만들고, rename()으로 파일을 해당 폴더로 옮깁니다.
- 기타 파일 처리: 분류 기준에 없는 파일들은 OTHER-FILES 폴더로 모읍니다.
- 빈 폴더 삭제: 마지막으로 os.rmdir()을 호출해 내용이 없는 디렉터리를 제거합니다.
완성된 최종 스크립트
지금까지의 내용을 합치면 아래와 같은 완성형 스크립트가 됩니다. 정리하고 싶은 폴더 안에서 실행하면 됩니다.
#Python Lazy Junk Files Organizer
#Import important libraries
import os
from pathlib import Path
#
DIRECTORIES = {
"HTML": [".html5", ".html", ".htm", ".xhtml"],
"IMAGES": [".jpeg", ".jpg", ".tiff", ".gif", ".bmp", ".png", ".bpg", "svg",
".heif", ".psd"],
"VIDEOS": [".avi", ".flv", ".wmv", ".mov", ".mp4", ".webm", ".vob", ".mng",
".qt", ".mpg", ".mpeg", ".3gp"],
"DOCUMENTS": [".oxps", ".epub", ".pages", ".docx", ".doc", ".fdf", ".ods",
".odt", ".pwi", ".xsn", ".xps", ".dotx", ".docm", ".dox",
".rvg", ".rtf", ".rtfd", ".wpd", ".xls", ".xlsx", ".ppt",
"pptx"],
"ARCHIVES": [".a", ".ar", ".cpio", ".iso", ".tar", ".gz", ".rz", ".7z",
".dmg", ".rar", ".xar", ".zip"],
"AUDIO": [".aac", ".aa", ".aac", ".dvf", ".m4a", ".m4b", ".m4p", ".mp3",
".msv", "ogg", "oga", ".raw", ".vox", ".wav", ".wma"],
"PLAINTEXT": [".txt", ".in", ".out"],
"PDF": [".pdf"],
"PYTHON": [".py"],
"XML": [".xml"],
"EXE": [".exe"],
"SHELL": [".sh"]
}
FILE_FORMATS = {file_format: directory
for directory, file_formats in DIRECTORIES.items()
for file_format in file_formats}
def organise_folder():
for entry in os.scandir():
if entry.is_dir():
continue
file_path = Path(entry)
file_format = file_path.suffix.lower()
if file_format in FILE_FORMATS:
directory_path = Path(FILE_FORMATS[file_format])
directory_path.mkdir(exist_ok=True)
file_path.rename(directory_path.joinpath(file_path))
try:
os.mkdir("OTHER-FILES")
except:
pass
for dir in os.scandir():
try:
if dir.is_dir():
os.rmdir(dir)
else:
os.rename(os.getcwd() + '/' + str(Path(dir)), os.getcwd() + '/OTHER-FILES/' + str(Path(dir)))
except:
pass
if __name__ == "__main__":
organise_folder()
커스터마이징 팁
- 새로운 확장자를 추가하려면 DIRECTORIES 딕셔너리의 해당 카테고리 리스트에 확장자만 추가하면 됩니다.
- 새로운 카테고리가 필요하다면 예를 들어 "FONTS": [".ttf", ".otf", ".woff"]처럼 키-값 쌍을 추가하세요.
- 스크립트는 실행 위치의 파일만 정리하므로, 반드시 정리 대상 폴더 안에서 실행하거나 대상 경로를 지정하도록 코드를 수정해야 합니다.
위 스크립트를 특정 디렉터리 경로에서 실행하면 아래와 같이 파일이 폴더별로 깔끔하게 정리된 결과를 확인할 수 있습니다.
실행 결과
