학습 기록
Python 공부 기록 #14 - datetime으로 오늘 날짜를 파일 이름에 자동으로 넣기
0. 목차
-
인트로: 결과 파일이 자꾸 덮어써졌다
-
오늘 날짜를 Python으로 가져오기
-
날짜 모양을 파일 이름에 맞게 바꾸기
-
날짜가 들어간 Excel 파일 저장하기
-
시간까지 넣어서 파일 구분하기
-
실무에서는 어디에 쓸 수 있을까?
-
삽질했던 부분들
-
아웃트로: 매일 다른 이름으로 결과 남기기
-
1. 인트로: 결과 파일이 자꾸 덮어써졌다
지난 글에서는 pandas로 정리한 데이터를 새 Excel 파일과 여러 시트로 저장해 봤습니다.
파일을 한 번 만들 때는 문제가 없었습니다. 근데 다음 날 같은 코드를 실행하니 기존 결과 파일이 새로운 파일로 바뀌어 있었습니다.
파일 이름이 계속 blog_check_result.xlsx였기 때문입니다.
날짜별 결과를 비교하려면 파일을 매번 직접 열어서 이름을 바꿔야 했습니다. 자동으로 실행하는 코드인데 마지막에 사람이 파일 이름을 고치는 것도 조금 이상했고요.
“오늘 날짜를 파일 이름에 알아서 넣을 수 없을까?”
찾아보니까 Python의 datetime을 사용하면 실행한 날짜와 시간을 가져와서 파일 이름에 넣을 수 있었습니다.
오늘은 결과 파일 이름을 매일 다르게 만들어서 기존 파일이 덮어써지지 않도록 해봤습니다.
2. 오늘 날짜를 Python으로 가져오기
먼저 datetime에서 현재 날짜와 시간을 가져왔습니다.
from datetime import datetime
now = datetime.now()
print(now)
datetime.now()는 코드를 실행한 시점의 날짜와 시간을 가져옵니다.
실행하면 아래처럼 연도, 월, 일, 시, 분, 초가 함께 나옵니다.
2026-07-31 20:15:32.123456
날짜를 직접 입력하지 않아도 현재 시간이 나오는 걸 보니 이거 되겠는데? 싶었습니다.
다만 이 값을 그대로 파일 이름에 넣기에는 공백과 콜론 등이 섞여 있어서 모양을 정리할 필요가 있었습니다.
3. 날짜 모양을 파일 이름에 맞게 바꾸기
strftime()을 사용하면 날짜를 원하는 모양의 문자열로 바꿀 수 있습니다.
from datetime import datetime
today = datetime.now().strftime("%Y%m%d")
print(today)
실행 결과는 아래와 같습니다.
20260731
%Y는 네 자리 연도, %m은 두 자리 월, %d는 두 자리 일을 뜻합니다.
-
%Y: 2026
-
%m: 07
-
%d: 31
-
연도와 월, 일 사이에 하이픈을 넣고 싶다면 아래처럼 작성할 수 있습니다.
today = datetime.now().strftime("%Y-%m-%d")
print(today)
이 경우 결과는 2026-07-31처럼 나옵니다.
strftime()은 날짜를 내가 원하는 글자 모양으로 바꾸는 명령이라고 이해했습니다.
4. 날짜가 들어간 Excel 파일 저장하기
이제 날짜 문자열을 Excel 파일 이름에 넣어봤습니다.
import pandas as pd
from datetime import datetime
df = pd.read_excel("blog_posts.xlsx")
valid_df = df[df["링크"].notna()]
today = datetime.now().strftime("%Y%m%d")
output_file = f"blog_check_result_{today}.xlsx"
valid_df.to_excel(
output_file,
index=False
)
print("저장 완료:", output_file)
f"blog_check_result_{today}.xlsx"는 문자열 안에 today 변수의 값을 넣는 코드입니다.
2026년 7월 31일에 실행하면 아래 이름으로 저장됩니다.
blog_check_result_20260731.xlsx
다음 날 실행하면 날짜 부분이 바뀌기 때문에 전날 파일을 덮어쓰지 않습니다.
마지막에 저장된 파일 이름도 출력하도록 했습니다. 작업 스케줄러로 실행했을 때 어떤 이름으로 저장됐는지 확인하기 편할 것 같았습니다.
5. 시간까지 넣어서 파일 구분하기
같은 날 코드를 여러 번 실행한다면 날짜만으로는 파일 이름이 겹칠 수 있습니다.
이럴 때는 시, 분, 초도 함께 넣을 수 있습니다.
now_text = datetime.now().strftime("%Y%m%d_%H%M%S")
output_file = f"blog_check_result_{now_text}.xlsx"
print(output_file)
%H는 시, %M은 분, %S는 초를 뜻합니다.
실행 결과는 아래처럼 나옵니다.
blog_check_result_20260731_201532.xlsx
하루에 한 번 실행하는 파일은 날짜만으로 충분하고, 여러 번 만들어지는 파일은 시간까지 넣으면 구분하기 좋겠습니다.
6. 실무에서는 어디에 쓸 수 있을까?
날짜가 들어간 파일 이름은 정기적으로 생성하는 자료에 쓸 수 있을 것 같습니다.
-
매일 수집하는 크롤링 결과 파일
-
주간 CRM 데이터 점검 결과
-
월별 매출 추출 자료
-
오류 데이터 확인 목록
-
수정 전 원본 파일 백업
-
파일 이름만 봐도 언제 생성된 자료인지 알 수 있고, 이전 결과와 비교하기도 쉬워집니다.
코드가 자동으로 실행된다면 결과 파일의 이름도 자동으로 관리돼야 했습니다.
7. 삽질했던 부분들
처음에는 시간을 아래처럼 그대로 파일 이름에 넣었습니다.
now_text = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
근데 Windows 파일 이름에는 콜론을 사용할 수 없어서 저장 과정에서 오류가 났습니다.
공백과 콜론을 밑줄 또는 빈 문자열로 바꾸니 해결됐습니다.
now_text = datetime.now().strftime("%Y%m%d_%H%M%S")
또 %m과 %M도 헷갈렸습니다. 소문자 %m은 월이고, 대문자 %M은 분이었습니다.
날짜가 이상하게 나오면 대문자와 소문자를 먼저 확인하면 되겠습니다.
8. 아웃트로: 매일 다른 이름으로 결과 남기기
오늘은 datetime으로 현재 날짜를 가져오고, 날짜가 들어간 Excel 파일 이름을 만들어 봤습니다.
핵심 정리
-
datetime.now()로 현재 날짜와 시간 가져오기
-
strftime()으로 원하는 날짜 모양 만들기
-
f-string으로 날짜를 파일 이름에 넣기
-
같은 날 여러 번 저장한다면 시간까지 추가하기
-
Windows 파일 이름에는 콜론을 사용하지 않기
이제 할 수 있는 것들
-
매일 다른 이름으로 Excel 결과 저장하기
-
기존 결과 파일이 덮어써지는 상황 막기
-
파일 이름만 보고 생성 날짜 확인하기
-
날짜별 크롤링 결과를 비교할 수 있게 쌓기
-
다음 포스팅에서는 저장할 폴더가 없으면 자동으로 만드는 방법을 공부해 보려고 합니다.
pathlib을 사용해서 날짜별 폴더를 만들고, 결과 파일을 정해진 위치에 저장해 보겠습니다.