Python : string 타입을 datetime으로

꽃봉우리·2024년 10월 16일

datetime 파싱 에러 발생

출근하기 전에, datetime 쪽 파싱 에러가 났다고 전달을 받았다

TypeError: argument of type ‘NoneType’ is not iterable

저장을 할 때 빈 값으로 들어가는 문제가 생겼고 출근하자마자 디버깅을 해보기로 했다.

원인

프로그램 디버깅을 하기 전에, 크롤링하는 사이트에 들어가서 확인을 해봤다.
내가 만든 로직에서 사이트마다 게시물 시간을 '년 전', '일 전' 이런식으로 되어 있어 이 기준으로 파싱을 하였다. 하지만, 내가 크롤링하는 사이트에서는 29일 전을 마지막으로 년-월-일 날짜가 찍혀있었고 이것은 우리가 파싱할 때 string 타입으로 가져오기 때문에 저장할 때 오류가 났었던거다

Conver String to datetime

파이썬에서는 문자열을 날짜로 바꿔주는 작업은 strptime이라는 것을 사용하면 된다고 그랬다.

datetime.strptime(post_time_str, '%Y-%m-%d %H:%M:%S')

post_time_str을 입력한 포맷에 맞춰 타입을 변경시켜준다.

strptime 과 strftime

  1. 기본 기능
  • strftime: datetime 객체를 문자열로 변환 (Formatting)
  • strptime: 문자열을 datetime 객체로 변환 (Parsing)
  1. 사용 방향:
  • strftime: datetime → 문자열
  • strptime: 문자열 → datetime
  1. 메서드 소속
  • strftime: datetime 객체의 메서드
  • strptime: datetime 클래스의 메서드

예제

from datetime import datetime

# strftime 예제
now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_date)  # 예: '2024-10-16 14:30:00'

# strptime 예제
date_string = "2024-10-16 14:30:00"
parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(parsed_date)  # 예: datetime(2024, 10, 16, 14, 30)
  1. 파라미터:
  • strftime(format): format 문자열을 받아 그에 맞게 datetime을 포맷팅
  • strptime(date_string, format): 날짜 문자열과 그 문자열의 형식을 나타내는 format 문자열을 받음
  1. 에러 처리:
  • strftime: 잘못된 형식 지정자를 사용하면 ValueError 발생
  • strptime: 문자열이 지정된 형식과 일치하지 않으면 ValueError 발생
  1. 용도:
  • strftime: 날짜와 시간을 특정 형식의 문자열로 표시할 때 사용 (예: 로그 기록, 사용자 인터페이스 표시)
  • strptime: 문자열로 된 날짜와 시간을 파싱하여 datetime 객체로 변환할 때 사용 (예: 사용자 입력 처리, 데이터 파싱)

0개의 댓글