Comment extraire la date d'une chaîne comme "Monkey 2010-07-10 Love Banana" ? Merci !
Réponses
Trop de publicités?Utilisation de python-dateutil :
In [1]: import dateutil.parser as dparser
In [18]: dparser.parse("monkey 2010-07-10 love banana",fuzzy=True)
Out[18]: datetime.datetime(2010, 7, 10, 0, 0)
Les dates invalides génèrent un ValueError
:
In [19]: dparser.parse("monkey 2010-07-32 love banana",fuzzy=True)
# ValueError: day is out of range for month
Il peut reconnaître des dates dans de nombreux formats :
In [20]: dparser.parse("monkey 20/01/1980 love banana",fuzzy=True)
Out[20]: datetime.datetime(1980, 1, 20, 0, 0)
Notez que cela permet de deviner si la date est ambiguë :
In [23]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True)
Out[23]: datetime.datetime(1980, 10, 1, 0, 0)
Mais la façon dont il analyse les dates ambiguës est personnalisable :
In [21]: dparser.parse("monkey 10/01/1980 love banana",fuzzy=True, dayfirst=True)
Out[21]: datetime.datetime(1980, 1, 10, 0, 0)
Si la date est donnée sous une forme fixe, vous pouvez simplement utiliser une expression régulière pour extraire la date et "datetime.datetime.strptime" pour analyser la date :
import re
from datetime import datetime
match = re.search(r'\d{4}-\d{2}-\d{2}', text)
date = datetime.strptime(match.group(), '%Y-%m-%d').date()
Sinon, si la date est donnée sous une forme arbitraire, vous ne pouvez pas l'extraire facilement.
Vous pouvez également essayer le module Dateparser, qui peut être plus lent que le détecteur de date sur le texte libre, mais qui devrait couvrir plus de cas potentiels et de formats de date, ainsi qu'un nombre important de langues.