Ich kenne keine Bibliothek mit der Funktionalität, die Sie fragen, aber es ist nicht so schwierig, eine Funktion zu schreiben, die die passenden Formate für eine gegebene Zeichenfolge zurückgibt.
Obwohl dieses nicht löst das Problem einer Zeichenfolge in mehr als einem Format übereinstimmen.
Hier ist ein Beispiel für einige statische allgemeine Formate auf numerisch basierten Datum.
date_formats = ["%Y-%m-%d", "%d-%m-%Y", "%m-%d-%Y", "%Y/%m/%d", "%d/%m/%Y", "%m/%d/%Y", "%Y.%m.%d", "%d.%m.%Y", "%m.%d.%Y", "%c", "%x"]
def string_to_date(str):
match = []
for fmt in date_formats:
try:
datetime.strptime(str, fmt)
except ValueError as e:
print(e)
continue
match.append(fmt)
return match
Und einige repräsentative Ausgabe:
print(string_to_date("11.12.2015")) # ['%d.%m.%Y', '%m.%d.%Y']
print(string_to_date("21/12/2015")) # ['%d/%m/%Y']
Natürlich können Sie Code, um Ihre Formate dynamisch zu bauen schreiben kann, aber in diesem Fall ich denke, es wird zu breit.
Falls Sie sich für einen dynamischen Ansatz entscheiden würden, würde ich vorschlagen, zuerst das mögliche Trennzeichen in Ihrem Skript abzufangen und dann das Format zu erstellen.
Wie sollte eine solche Bibliothek entscheiden, ob die '11' in' 2016-11-04' der Monat oder der Tag des Monats ist? –
Stimmen Sie mit Lutz überein, haben aber oft gleiches Problem, dann stehen typischerweise O (1000) solche String-Daten zur Verfügung. Also route ich Brute-Force und versuche, einen Satz gegebener Formate mit 'strptime' zu vergleichen und hoffentlich eine eindeutige Übereinstimmung zu erhalten. –
was ist dein zweck? Wie Lutz gesagt hat, ist es eine Eins-zu-viele-Frage. –