J'essaie de trouver le meilleur moyen de convertir "vendredi 1er mars 2019" ou "samedi 2 mars 2019" en objet datetime python.
J'ai essayé en fractionnant, que j'avais des réflexions sur les regex, mais je suis tout à fait sûr qu'il y a une manière plus «élégante» de le faire
De la chaîne "Vendredi 1er mars 2019", j'attends le 01/03/2019 ou le 01/03/2019
TNX!
3 Réponses :
Vous allez rencontrer des problèmes avec 1st
, 2nd
.
Alors, essayez ceci (sans ajouter de bibliothèque externe / tierce):
def convdate(s): parts = s.split(" ") ds = "{} {} {} {}".format( parts[0], re.sub('[^0-9]','', parts[1]), parts[2], parts[3] ) return dt.strptime(ds, "%A %d %B %Y")
Si vous voulez en faire une fonction, procédez comme suit:
import re from datetime import datetime as dt ds = "Friday 1st March 2019" parts = ds.split(" ") ds = "{} {} {} {}".format( parts[0], re.sub('[^0-9]','', parts[1]), parts[2], parts[3] ) a = dt.strptime(ds, "%A %d %B %Y")
Ce n'est peut-être pas le "meilleur" moyen, mais un moyen très simple est de l'analyseur de dateutil Renvoie: Cela peut se résumer comme suit: '01-03-2019'
from dateutil import parser
from datetime import datetime as dt
dt.strftime(parser.parse("Friday 1st March 2019"), "%d-%m-%Y")
datetime.datetime(2019, 3, 1, 0, 0)
Exactement ce que j'ai demandé! Merci tgikal!
Veuillez vous référer à une question déjà répondue: Comment faire obtenir le datetime à partir d'une chaîne contenant '2nd' pour la date en Python?
Comme je ne peux que le répéter, la solution est d'utiliser l'analyseur de dateutil:
import datetime simplified_txt = "Friday 1 March 2019" datetime_obj = datetime.datetime.strptime(simplified_txt,"%A %d %B %Y")
Dans les coulisses, je suppose que les parties "1ère" et "2ème" sont extraites d'une manière ou d'une autre (par exemple fractionnement + regex) et simplifiées à sa valeur de jour uniquement. Selon une entrée comme celle-ci, la bibliothèque datetime commune peut être utilisée avec la chaîne de format de date appropriée:
from dateutil.parser import parse your_string = "Friday 1st March 2019" date_obj = parse(your_string)