2011-06-10 8 views
3

날짜 및 시간을 나타내는 전자 메일 헤더 내의 필드를 구문 분석하는 스크립트가 있습니다. 다음과 같이 이러한 문자열의 몇 가지 예는 다음과 같습니다Python 문자열에서 datetime을 추출하는 가장 좋은 방법

Fri, 10 Jun 2011 11:04:17 +0200 (CEST) 
Tue, 1 Jun 2011 11:04:17 +0200 
Wed, 8 Jul 1992 4:23:11 -0200 
Wed, 8 Jul 1992 4:23:11 -0200 EST 

나는 내가 꽤 잘 작동하는 것을 그냥 같이 datetime.datetime.strptime를 사용했던 일부 문자열의 끝에서 CEST/EST 부분에 직면하게되기 전에 :

msg['date'] = 'Wed, 8 Jul 1992 4:23:11 -0200' 
mail_date = datetime.datetime.strptime(msg['date'][:-6], '%a, %d %b %Y %H:%M:%S') 

끝에 표준 시간대 정보를 제외하고 정규식을 문자열의 날짜 부분과 일치 시키려고했지만 정규식과 관련된 문제 (콜론과 일치하지 않음)가있었습니다.

정규식을 사용하면 위의 모든 예를 파싱하는 가장 좋은 방법이 있습니까? 그렇다면이 예제와 일치하는 정규 표현식을 누군가가 공유 할 수 있습니까? 결국 datetime 개체를 찾고 있습니다.

답변

7

:

from email import utils 
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17 +0200 (CEST)') 
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17 +0200') 
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17') 

출력은 : 나는 오래된 RFC822 모듈은 비슷한 기능을했지만, 내가 email.utils 인식하지 것을보고

(2011, 6, 10, 11, 4, 17, 0, 1, -1, 7200) 
(2011, 6, 10, 11, 4, 17, 0, 1, -1, 7200) 
(2011, 6, 10, 11, 4, 17, 0, 1, -1, None) 
+0

. 고맙습니다. – ajt

2

아마도 귀하의 질문에 대한 오해가 있었지만 간단한 split으로 충분하지 않습니까? python time to age part 2, timezones에서

#!/usr/bin/python 

d = ["Fri, 10 Jun 2011 11:04:17 +0200 (CEST)", "Tue, 1 Jun 2011 11:04:17 +0200", 
    "Wed, 8 Jul 1992 4:23:11 -0200", "Wed, 8 Jul 1992 4:23:11 -0200 EST"] 

for i in d: 
    print " ".join(i.split()[0:5]) 


Fri, 10 Jun 2011 11:04:17 
Tue, 1 Jun 2011 11:04:17 
Wed, 8 Jul 1992 4:23:11 
Wed, 8 Jul 1992 4:23:11 
관련 문제