Разобрать эту дату в Python: 5 ноября 2010 - PullRequest
3 голосов
/ 11 августа 2010

У меня сегодня плохое время с анализом и форматированием даты.

Баллы за кого-то, кто может разобрать этот формат даты в datetime.date или datetime.datetime (я не слишком привередлив, но я бы предпочел .date):

5th November 2010

Ответы [ 3 ]

17 голосов
/ 11 августа 2010

Использование dateutil :

In [2]: import dateutil.parser as dparser

In [3]: date = dparser.parse('5th November 2010')

In [4]: date
Out[4]: datetime.datetime(2010, 11, 5, 0, 0)
10 голосов
/ 11 августа 2010

К сожалению, strptime не имеет символов формата для «пропуска порядкового суффикса» - поэтому я сначала сделал бы пропуск, с небольшим RE, а затем проанализировал полученную «чистую» строку. I.e.:

>>> import re
>>> import datetime
>>> ordn = re.compile(r'(?<=\d)(st|nd|rd|th)\b')
>>> def parse(s):
...   cleans = ordn.sub('', s)
...   dt = datetime.datetime.strptime(cleans, '%d %B %Y')
...   return dt.date()
... 
>>> parse('5th November 2010')
datetime.date(2010, 11, 5)

Ваши предпочтения date против datetime, конечно, не проблема, вот для чего нужен .date() метод datetime объектов; -).

Сторонние расширения, такие как dateutil , могут быть полезны, если вам нужно много «нечеткого» анализа дат (или, между прочим, другой причудливый материал, связанный с датами ;-).

5 голосов
/ 11 августа 2010

Если порядковый номер постоянен, то:

datetime.strptime(s, '%dth %B %Y')

Остальное:

date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')

Или как ~ unutbu сказал использовать dateutil :)

...