2017-02-18 21 views
0

Я пытаюсь выполнить синтаксический анализ строчной строки в формате ao в формате Python, но мне трудно это делать. Рассмотрим следующий пример:ValueError: Неизвестный формат строки в 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 

Я также попытался разборе это с помощью регулярного strptime:

>>> 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' 

Кто-нибудь знает, как на земле, я могу разобрать этот довольно простой формат DATETIME?

+0

Почему вы используете 'json.dumps 'на это? Если у вас JSON, проанализируйте его перед разбором даты. – Ryan

ответ

6

примечание сообщение об ошибке:

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

Есть одиночные кавычки + двойные кавычки, что означает, что строка действительно содержит двойные кавычки. Это потому, что сериализация json добавляет двойные кавычки к строкам.

вы можете лишить кавычки вашей строки:

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

или, может быть, меньше "Hacky", де-сериализации с помощью json.loads:

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

А, я не обратил на это внимания. Благодаря! – kramer65

+0

Спасибо за поддержку :-) – trincot