Parse cette date en Python: Le 5 Novembre 2010
-
27-09-2019 - |
Question
Je vais avoir un mauvais moment avec la date et l'analyse syntaxique mise en forme aujourd'hui.
Points pour quelqu'un qui peut analyser ce format de date dans un datetime.date
ou datetime.datetime
(je ne suis pas trop pointilleux mais je préfère .date
):
5th November 2010
La solution
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)
Autres conseils
Malheureusement, strptime
n'a pas de caractères de format pour « sauter un suffixe ordinal » -, je ferais sauter la première, avec un peu de RE, puis analyser la chaîne résultante « claire ». 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)
Votre préférence pour date
vs datetime
est pas un problème bien sûr, c'est ce que la méthode .date()
des objets datetime
est pour; -).
Les extensions tierces comme dateutil peut être utile si vous avez besoin de faire beaucoup de « floue » l'analyse syntaxique de la date (ou d'autres choses liées à la date de fantaisie ;-), par la manière.
Si l'ordinal est alors constante:
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')
Ou comme ~ unutbu dit :) utiliser dateutil