갑자기 Python : 문자열을 날짜/시간 클래스로 변환.

아.. ping 을 뚫어져라 보던 중, 파이썬이 또 발목을 잡는다.

ping 에서 투덜거린 메시지는 이렇다.

2020. 09. 10. (목) 11:03:27 KST: 64 bytes from 168.126.63.1: icmp_seq=35699 ttl=56 time=16.8 ms

앞부분에 나와있는 시간/날짜 문자열을, 시간 클래스로 변환하려고 한다.
이를 위해선 datetime 클래스가 필요하다.
그리고, 문자열을 strptime()을 사용해서 시간 형식으로 변환시켜 줘야 한다.

from datetime import datetime
datetime_str = "2020. 09. 10. (목) 11:03:27"

datetime_obj = datetime.strptime(datetime_str, '%Y. %m. %d. (%a) %H:%M:%S')
............
ValueError: time data '2020. 09. 11. (금) 22:36:33' does not match format '%Y. %m. %d. (%a) %H:%M:%S'

요일의 축약형(금, ‘금요일’이 아닌 ‘금’)은 %a 로 받을 수 있으므로, 저렇게 쓰면 제대로 돼야 한다.
그런데, 오류가 난다.

혹시나 괄호를 특별처리(Escape) 해줘야 하나, 뭘 잘못 썼나 보고 또 보고..
이 문제와 유사한, 한국어 관련된 문서도 찾았지만, MS 윈도우/우분투 문제인지 그 방법대로는 풀리지 않았다.

일단, Python 에서 사용 중인 Locale 을 알아보기로 했다.

import locale
locale.setlocale(locale.LC_ALL)
'LC_CTYPE=ko_KR.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C'

왜 그런진 알 수가 없지만, LC_CTYPE 하나만 빼고 모두 C 로 설정돼 있었다. 이 문제라는게 점점 더 확실해지고 있는 순간!!
그리하여, 이제 한국어로 설정을 하려 했다.

locale.setlocale(locale.LC_ALL, 'ko_KR')
.....
Error: unsupported locale setting

그러나, 투덜이 소환.
왜???


답은 utf.

이게 제대로된 문법이다.

locale.setlocale(locale.LC_ALL, 'ko_KR.UTF-8')

이제 성공!

datetime_obj = datetime.strptime(datetime_str, r'%Y. %m. %d. (%a) %H:%M:%S')

꽃삽질은 멈출 줄 모르는군. 닳아버린 삽만해도 벌써 몇자루일까.

안녕하세요. 글 남겨주셔서 고맙습니다.