Python에서 "알 수 없는 형식" 문자열을 날짜/시간 객체로 변환
날짜는 '2009/05/13 19:19:30', '2009년 5월 13일 07:19PM', '2009-05-13 19:19' 등 다양한 형식일 수 있습니다.
Python은 날짜 시간과 관련된 데이터를 작업할 수 있는 많은 모듈을 제공합니다. 알 수 없는 형식의 날짜 문자열을 Python datetime 객체로 읽으려면 python dateutil, datetime 모듈을 사용할 수 있습니다.
Python datetime 객체는 날짜 및 시간 객체에 대한 모든 정보를 포함하는 단일 객체입니다. 연도, 월, 일, 시간, 분, 초 및 시간대와 관련된 데이터도 나타냅니다.
아래 기사에서는 알 수 없는 형식 문자열을 Python datetime 객체로 변환하는 방법을 살펴보겠습니다. Python에서 알 수 없는 형식 문자열을 날짜/시간 객체로 변환하는 것을 이해하기 위해 입출력 시나리오를 살펴보겠습니다.
입력 출력 시나리오
알 수 없는 형식의 입력 문자열이 있다고 가정합니다. 그리고 출력에서 변환된 datetime 객체를 볼 수 있습니다.
Input string (unknown format):
20050607T090650
Output Datetime object:
2005-07-06 09:06:50
Data type:
날짜/시간을 사용합니다. strptime() 메서드
datetime 라이브러리를 사용하여 날짜 시간 문자열을 datetime 객체로 변환할 수 있습니다. strptime() 메소드는 문자열을 주어진 형식 코드에 해당하는 날짜/시간 객체로 구문 분석합니다. 다음은 이 방법의 구문입니다.
datetime.strptime(data, format_data)
어디,
데이터: 날짜_문자열.
형식: 이 형식 코드를 기반으로 date_string을 변환합니다.
몇 가지 형식 코드는 다음과 같습니다.
%a 축약된 이름의 요일입니다.
%전체 이름으로 평일.
%w 십진수로 표시된 요일입니다.
%d 달의 날짜 앞에 0이 붙습니다.
%B 월을 전체 이름으로 사용하세요.
-
%b 월을 약식 이름으로 사용합니다.
%m 월은 앞에 0이 붙습니다.
%y 연도를 두 자리로 표현합니다.
%Y년(세기 포함).
%H 시간(24시간제)으로, 제로 패딩된 십진수입니다.
%M 분은 0으로 채워진 십진수입니다.
%S 초는 0으로 채워진 십진수입니다.
±HHMM[SS[.ffffff]] 형식의 %z UTC 오프셋입니다.
%Z 시간대 이름입니다.
예
strptime() 메소드를 사용하여 문자열 데이터의 날짜를 datetime 객체로 변환합니다.
from datetime import datetime
date_string = '20151002151700-0800'
print("Input string (unknown format):")
print(date_string)
obj = datetime.strptime(date_string, "%Y%m%d%H%M%S%z")
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
산출
Input string (unknown format):
20151002151700-0800
Output Datetime object:
2015-10-02 15:17:00-08:00
Data type: <class 'datetime.datetime'>
위 블록에서는 입력 문자열에서 변환된 날짜/시간 객체를 볼 수 있습니다. strptime() 메소드에 "%Y%m%d%H%M%S%z" 형식을 지정했습니다.
예
다른 예를 들어 형식 코드를 지정하여 날짜 문자열을 datetime 개체로 변환해 보겠습니다.
from datetime import datetime
date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)
obj = datetime.strptime(date_string, '%a %b %d %H:%M:%S %Y %z')
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
산출
Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>
여기서 "Wed Mar 16 16:12:05 2016 +0800"은 문자열이고 obj는 날짜/시간 객체입니다.
dateutil.parser.parse() 함수 사용
dateutil 모듈의 parse() 메소드는 매우 유연하며 주어진 문자열 데이터의 모든 내용을 구문 분석합니다. 구문 분석 함수는 날짜 문자열을 날짜/시간 객체로 구문 분석하는 더 많은 형식을 제공합니다.
예
여기서는 알 수 없는 형식의 문자열 데이터를 datetime 객체로 읽어들이기 위해 parse() 메소드를 사용할 것입니다.
from dateutil.parser import parse
date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)
obj = parse(date_string)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
산출
Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>
알 수 없는 형식에서 변환된 날짜/시간 객체가 위 블록에 표시됩니다.
예
일부 날짜 문자열은 모호할 수 있습니다. 예를 들어 1995-06-07은 6월 7일 또는 7월 6일을 의미할 수 있습니다. 구문 분석 메소드에는 이러한 유형의 모호한 데이터를 처리하기 위한 dayfirst 및 yearfirst와 같은 매개변수가 있습니다.
from dateutil.parser import parse
date_string = '20050607T090650'
print("Input string (unknown format):")
print(date_string)
obj = parse(date_string, dayfirst=True)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))
산출
Input string (unknown format):
20050607T090650
Output Datetime object:
2005-07-06 09:06:50
Data type: <class 'datetime.datetime'>
이 예에서는 dayfirst 매개변수에 부울 값 True를 지정했으므로 출력에서 datetime 객체는 첫 번째 날(6월 7일)을 나타냅니다.