2017-02-18 4 views
0

Ich versuche, eine grundlegende ISO-formatierte Datetime-Zeichenfolge in Python zu analysieren, aber ich habe es schwer, das zu tun. Betrachten Sie das folgende Beispiel:ValueError: Unbekanntes Zeichenfolgenformat in Python?

>>> import json 
>>> from datetime import datetime, date 
>>> import dateutil.parser 
>>> date_handler = lambda obj: obj.isoformat() 
>>> the_date = json.dumps(datetime.now(), default=date_handler) 
>>> print the_date 
"2017-02-18T22:14:09.915727" 
>>> print dateutil.parser.parse(the_date) 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    print dateutil.parser.parse(the_date) 
    File "/usr/local/lib/python2.7/site-packages/dateutil/parser.py", line 1168, in parse 
    return DEFAULTPARSER.parse(timestr, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/dateutil/parser.py", line 559, in parse 
    raise ValueError("Unknown string format") 
ValueError: Unknown string format 

ich auch versucht habe Parsen dies den regelmäßigen strptime mit:

>>> print datetime.strptime(the_date, '%Y-%m-%dT%H:%M:%S') 
# removed rest of the error output 
ValueError: time data '"2017-02-18T22:11:58.125703"' does not match format '%Y-%m-%dT%H:%M:%S' 
>>> print datetime.strptime(the_date, '%Y-%m-%dT%H:%M:%S.%f') 
# removed rest of the error output 
ValueError: time data '"2017-02-18T22:11:58.125703"' does not match format '%Y-%m-%dT%H:%M:%S.%f' 

Weiß jemand, wie auf der Erde ich dieses ziemlich einfach Datetime-Format analysieren kann?

+0

Warum hast du 'json.dumps verwenden 'darauf? Wenn Sie JSON haben, analysieren Sie es, bevor Sie das Datum analysieren. – Ryan

Antwort

6

beachten Sie die Fehlermeldung:

ValueError: time data '"2017-02-18T22:11:58.125703"' 

Es gibt einfache Anführungszeichen + doppelte Anführungszeichen, was bedeutet, dass die Zeichenfolge doppelte Anführungszeichen tatsächlich enthält. Das liegt daran, dass die Serialisierung json doppelte Anführungszeichen zu Strings hinzufügt.

Sie können die Anführungszeichen um die Zeichenfolge strippen:

datetime.strptime(the_date.strip('"'), '%Y-%m-%dT%H:%M:%S.%f') 

oder, vielleicht weniger "Hacky", de-serialize mit json.loads:

datetime.strptime(json.loads(the_date), '%Y-%m-%dT%H:%M:%S.%f') 
+0

Ah, das habe ich übersehen. Vielen Dank! – kramer65

+0

Danke für die Unterstützung :-) – trincot

Verwandte Themen