매일 쌓이는 사진, 문서, 보고서 파일들을 날짜별로 정리하고 싶은데 일일이 이름을 바꾸기 번거로우신가요? 파이썬 몇 줄이면 폴더 안의 모든 파일 이름에 날짜를 자동으로 추가할 수 있어요.
기본 코드로 바로 시작하기
import os
from datetime import datetime
# 작업할 폴더 경로 설정
folder_path = r'C:\Users\사용자\Documents\작업폴더'
# 오늘 날짜 문자열 생성
date_str = datetime.now().strftime('%Y-%m-%d')
# 폴더 내 파일 목록 가져오기
file_list = os.listdir(folder_path)
for filename in file_list:
old_file = os.path.join(folder_path, filename)
# 파일만 처리 (폴더는 제외)
if os.path.isfile(old_file):
new_filename = f"{date_str}_{filename}"
new_file = os.path.join(folder_path, new_filename)
os.rename(old_file, new_file)
print(f"{filename} → {new_filename}")
이 코드를 실행하면 파일명이 변경돼요. 단 몇 초만에 수십, 수백 개의 파일을 일괄 처리할 수 있어요.
날짜 형식 자유롭게 바꾸기
strftime() 함수의 포맷 문자열만 바꾸면 원하는 형식으로 날짜를 표현할 수 있어요.
# 한국식 날짜 표기
date_str = datetime.now().strftime('%Y.%m.%d') # 2025.07.25
# 숫자만으로 표기
date_str = datetime.now().strftime('%Y%m%d') # 20250725
# 연월만 표기
date_str = datetime.now().strftime('%Y-%m') # 2025-07
# 미국식 표기
date_str = datetime.now().strftime('%m-%d-%Y') # 07-25-2025
시간까지 포함해서 더 정확하게
같은 날 여러 번 작업하는 경우라면 시간까지 포함하면 좋아요.
import os
from datetime import datetime
folder_path = r'C:\Users\사용자\Documents\작업폴더'
# 날짜와 시간을 함께 포함
date_str = datetime.now().strftime('%Y-%m-%d_%H%M%S')
file_list = os.listdir(folder_path)
for filename in file_list:
old_file = os.path.join(folder_path, filename)
if os.path.isfile(old_file):
new_filename = f"{date_str}_{filename}"
new_file = os.path.join(folder_path, new_filename)
os.rename(old_file, new_file)
이렇게 하면
2025-07-25_143052_보고서.docx
형태로 초 단위까지 정확하게 기록돼요.
파일 생성일 기준으로 이름 바꾸기
현재 날짜가 아닌 파일의 생성일이나 수정일을 기준으로 하고 싶다면 이 코드를 사용하세요.
import os
from datetime import datetime
folder_path = r'C:\Users\사용자\Documents\사진폴더'
file_list = os.listdir(folder_path)
for filename in file_list:
old_file = os.path.join(folder_path, filename)
if os.path.isfile(old_file):
# 파일 생성 시간 가져오기
ctime = os.path.getctime(old_file)
date_str = datetime.fromtimestamp(ctime).strftime('%Y-%m-%d')
# 파일 수정 시간을 쓰고 싶다면
# mtime = os.path.getmtime(old_file)
# date_str = datetime.fromtimestamp(mtime).strftime('%Y-%m-%d')
new_filename = f"{date_str}_{filename}"
new_file = os.path.join(folder_path, new_filename)
os.rename(old_file, new_file)
사진 파일 정리할 때 특히 유용해요. 촬영일 기준으로 자동 정렬되니까요.
중복 파일명 자동 처리하기
같은 날짜에 같은 이름의 파일이 여러 개 있을 수 있잖아요. 이럴 때 자동으로 번호를 붙여주는 똑똑한 코드예요.
import os
from datetime import datetime
folder_path = r'C:\Users\사용자\Documents\작업폴더'
date_str = datetime.now().strftime('%Y-%m-%d')
file_list = os.listdir(folder_path)
for filename in file_list:
old_file = os.path.join(folder_path, filename)
if os.path.isfile(old_file):
# 파일명과 확장자 분리
base, ext = os.path.splitext(filename)
new_base = f"{date_str}_{base}"
new_file = os.path.join(folder_path, f"{new_base}{ext}")
# 중복 체크 및 번호 붙이기
count = 1
while os.path.exists(new_file):
new_file = os.path.join(folder_path, f"{new_base}_({count}){ext}")
count += 1
os.rename(old_file, new_file)
print(f"{filename} → {os.path.basename(new_file)}")
이 코드는
2025-07-25_보고서.docx
2025-07-25_보고서_(1).docx
2025-07-25_보고서_(2).docx
이런 식으로 자동으로 번호를 붙여줘요.
특정 확장자만 선택해서 처리하기
모든 파일이 아니라 특정 파일만 처리하고 싶을 때는 이렇게 하세요.
import os
from datetime import datetime
folder_path = r'C:\Users\사용자\Documents\사진폴더'
date_str = datetime.now().strftime('%Y-%m-%d')
# 처리할 확장자 목록
target_extensions = ['.jpg', '.jpeg', '.png', '.gif']
file_list = os.listdir(folder_path)
for filename in file_list:
old_file = os.path.join(folder_path, filename)
if os.path.isfile(old_file):
# 확장자 확인
_, ext = os.path.splitext(filename)
if ext.lower() in target_extensions:
new_filename = f"{date_str}_{filename}"
new_file = os.path.join(folder_path, new_filename)
os.rename(old_file, new_file)
print(f"이미지 파일 처리: {filename} → {new_filename}")
날짜를 파일명 뒤에 붙이기
앞이 아니라 뒤에 붙이고 싶다면 순서만 바꾸면 돼요.
import os
from datetime import datetime
folder_path = r'C:\Users\사용자\Documents\작업폴더'
date_str = datetime.now().strftime('%Y-%m-%d')
file_list = os.listdir(folder_path)
for filename in file_list:
old_file = os.path.join(folder_path, filename)
if os.path.isfile(old_file):
base, ext = os.path.splitext(filename)
new_filename = f"{base}_{date_str}{ext}"
new_file = os.path.join(folder_path, new_filename)
os.rename(old_file, new_file)
실무에서 정말 유용한 활용법
제가 실제로 써본 경험으로는 이런 상황에서 진짜 시간을 아껴줘요.
매일 쌓이는 업무 보고서나 회의록 정리할 때 날짜별로 자동 분류되니 나중에 찾기가 쉬워요. 특히 프로젝트별로 폴더를 만들어두고 이 스크립트를 돌리면 버전 관리가 저절로 돼요.
사진 정리할 때도 마찬가지예요. 휴대폰에서 옮긴 사진들이 IMG_001.jpg 같은 이름으로 되어 있잖아요. 이걸 날짜별로 바꿔두면 몇 년 뒤에도 언제 찍은 사진인지 바로 알 수 있어요.
안전하게 사용하는 팁
실수로 중요한 파일을 잘못 바꾸면 곤란하니까 이렇게 하세요.
import os
from datetime import datetime
import shutil
# 원본 폴더와 백업 폴더
source_folder = r'C:\Users\사용자\Documents\원본'
backup_folder = r'C:\Users\사용자\Documents\백업'
# 백업 폴더 생성
if not os.path.exists(backup_folder):
os.makedirs(backup_folder)
# 먼저 백업하고 이름 변경
date_str = datetime.now().strftime('%Y-%m-%d')
file_list = os.listdir(source_folder)
for filename in file_list:
old_file = os.path.join(source_folder, filename)
if os.path.isfile(old_file):
# 백업
backup_file = os.path.join(backup_folder, filename)
shutil.copy2(old_file, backup_file)
# 이름 변경
new_filename = f"{date_str}_{filename}"
new_file = os.path.join(source_folder, new_filename)
os.rename(old_file, new_file)
print(f"백업 완료 후 변경: {filename} → {new_filename}")
PowerShell이나 다른 방법도 있지만...
PowerShell로도 비슷한 작업을 할 수 있어요. 전용 리네임 소프트웨어도 있고요. 하지만 파이썬의 장점은 확장성이에요. 날짜 형식을 자유롭게 바꾸고, 조건을 추가하고, 다른 작업과 연계하기가 쉬워요.
무엇보다 한 번 만들어두면 계속 재사용할 수 있고, 필요에 따라 조금씩 수정해서 쓸 수 있다는 게 큰 장점이에요. 처음엔 복잡해 보여도 몇 번 써보면 정말 편리해요.