为了账号安全,请及时绑定邮箱和手机立即绑定

将具有日期时间值的字典的字符串表示形式转换回字典

将具有日期时间值的字典的字符串表示形式转换回字典

眼眸繁星 2021-07-16 17:05:41
我有一个字典的字符串表示。它是一个嵌套字典,甚至更复杂,其中的record_time键具有如下所示的日期时间值:d = """{    "motion_measure": {"INCAR": 69, "RANDOM": 63, "UNKNOWN": 62, "BIKING": 57, "WALKING": 48, "RUNNING": 41, "SEDENTARY": 0},    "samples": [0, 1.1791444, 11.036073],    "record_time": datetime.datetime(2018, 3, 26, 10, 3, 17, 441000)    }"""我尝试了这个相关问题中建议的两种方法:import astast.literal_eval(d)ast.literal_eval 不起作用,因为它无法处理日期时间值。import jsonjson.loads(d) json.loads 也不起作用,因为日期时间格式不可反序列化。有人知道使用 Python 将其转换回 dict 或 json 的好方法吗?我从 OrientDB 得到了这种奇怪的记录格式。
查看完整描述

2 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

由于您的字符串几乎是 json,您可以稍微清理一下并使用json.loads(并避免eval)。


例如,如果您可以将日期时间值转换为列表,那么一种方法是datetime.datetime(...)在转换为 dict 之前替换字符串中的所有实例(下面的示例使用正则表达式来处理替换)。然后,您可以使用datetime结果字典中的日期时间列表。


例如(在您的输入字符串中添加一个额外的日期时间以确保替换处理多个日期时间出现和没有指定毫秒的日期时间等):


import datetime

import re

import json


s = """{

    "motion_measure": {"INCAR": 69, "RANDOM": 63, "UNKNOWN": 62, "BIKING": 57, "WALKING": 48, "RUNNING": 41, "SEDENTARY": 0},

    "samples": [0, 1.1791444, 11.036073],

    "record_time": datetime.datetime(2018, 3, 26, 10, 3, 17, 441000), 

    "another_time": datetime.datetime(2017, 3, 26, 10, 3)

    }"""


# re.sub to replace datetime; json.loads to convert to dict

d = json.loads(re.sub(r'datetime\.datetime\(([^)]*)\)', r'[\1]', s))


# datetime.datetime(...) to work with resulting datetime lists

date1 = datetime.datetime(*d['record_time'])

date2 = datetime.datetime(*d['another_time'])


print(d)

# OUTPUT (shown on multiple lines for readability)

# {

# 'motion_measure': {'INCAR': 69, 'RANDOM': 63, 'UNKNOWN': 62, 'BIKING': 57, 'WALKING': 48, 'RUNNING': 41, 'SEDENTARY': 0},

# 'samples': [0, 1.1791444, 11.036073],

# 'record_time': [2018, 3, 26, 10, 3, 17, 441000],

# 'another_time': [2017, 3, 26, 10, 3]

# }


print(date1)

print(date2)

# OUTPUT

# 2018-03-26 10:03:17.441000

# 2017-03-26 10:03:00


查看完整回答
反对 回复 2021-07-21
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信