In dem Format, das mir gegeben wird, würde das Datum 2014-01-02 durch "20140102" dargestellt werden. Dies ist korrekt mit dem Standard strptime analysiert:Warum verursacht pythons datetime.datetime.strptime ('201412', '% Y% m% d') keinen ValueError?
>>> datetime.datetime.strptime("20140102", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
In diesem Format "201412" würde nicht ein gültiges Datum sein. Die docs sagen, dass die "% m" Direktive ist "Monat als eine Null gefüllte Dezimalzahl." Es gibt als Beispiele "01, 02, ..., 12". Die Tages-Direktive "% d" soll ebenfalls Null gepolstert sein.
Basierend darauf erwartete ich, dass "201412" eine ungültige Eingabe mit diesem Format wäre, würde also einen ValueError auslösen. Stattdessen wird es als 2014.01.02 interpretiert:
>>> datetime.datetime.strptime("201412", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
Die Frage ist: Gibt es eine Möglichkeit geben „keine ernsthaft mit Nullen aufgefüllt nur“? Oder missverstehe ich in diesem Zusammenhang den Begriff "zero-padded"?
Beachten Sie, dass es nicht darum geht, Daten in diesem Format zu analysieren, sondern um das Verhalten von strptime zu verstehen.
Dies ist wirklich nicht helfen, aber es ist etwas verwandte (man denke '/' getrennte Felder) [Parsing Nicht-Null gepolsterte Zeitstempel in Python] (http://stackoverflow.com/ Fragen/25279993/Parsing-nicht-Null-gepolstert-Timestamps-in-Python) – metatoaster
Ich denke, es hängt von dem regulären Ausdruck die Funktion verwendet – kiviak
Sieht aus wie einige zusätzliche Erklärung in den Python-Dokumenten wäre nett. Ist garantiert, dass 'strptime (" 2014123 ","% Y% m% d ") immer" datetime "(2014, 12, 3, 0, 0) oder" datetime "(2014, 1, 23, 0, 0) '? – Matthias