Parse questa data in Python: 5 Novembre 2010
-
27-09-2019 - |
Domanda
Sto avendo un brutto momento con la data di oggi l'analisi e la formattazione.
Punti per qualcuno che può analizzare questo formato della data in un datetime.date
o datetime.datetime
(Io non sono troppo esigente ma io preferirei .date
):
5th November 2010
Soluzione
Uso 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)
Altri suggerimenti
Purtroppo, strptime
non ha caratteri di formattazione per "saltare un suffisso ordinale" - così, farei il salto prima, con un po 'RE, e quindi analizzare la stringa risultante "chiaro". Cioè:.
>>> 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)
La preferenza per date
vs datetime
non è un problema, naturalmente, è quello che il metodo di .date()
datetime
oggetti è per; -).
estensioni di terze parti come dateutil può essere utile se avete bisogno di fare un sacco di "fuzzy" data l'analisi (o altre cose di fantasia data-correlato ;-), tra l'altro.
Se il numero ordinale è costante, allora:
datetime.strptime(s, '%dth %B %Y')
Else:
date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')
~ unutbu detto utilizzare dateutil :)