Лучший способ извлечь дату и время из строки в Python - PullRequest
3 голосов
/ 10 июня 2011

У меня есть скрипт, который анализирует поля в заголовках писем, которые представляют даты и время.Вот некоторые примеры этих строк:

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

До того, как я столкнулся с частями CEST / EST на концах некоторых строк, у меня все работало довольно хорошо, просто используя datetime.datetime.strptime, например так:

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.

Ответы [ 2 ]

7 голосов
/ 10 июня 2011

С время питона до возраста 2, часовые пояса :

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')

Вывод:

(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)
2 голосов
/ 10 июня 2011

Возможно, я неправильно понял ваш вопрос, но разве просто split не хватит?

#!/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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...