ValueError:Python中的未知字符串格式?

时间:2017-02-18 21:16:02

标签: python json parsing datetime

我试图在Python中解析基本的iso格式化日期时间字符串,但我很难做到这一点。请考虑以下示例:

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

有人知道我怎么能解析这个相当简单的日期时间格式?

1 个答案:

答案 0 :(得分: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')