2 回答

TA貢獻1798條經(jīng)驗 獲得超3個贊
由于您的字符串幾乎是 json,您可以稍微清理一下并使用json.loads(并避免eval)。
例如,如果您可以將日期時間值轉(zhuǎn)換為列表,那么一種方法是datetime.datetime(...)在轉(zhuǎn)換為 dict 之前替換字符串中的所有實例(下面的示例使用正則表達式來處理替換)。然后,您可以使用datetime結(jié)果字典中的日期時間列表。
例如(在您的輸入字符串中添加一個額外的日期時間以確保替換處理多個日期時間出現(xiàn)和沒有指定毫秒的日期時間等):
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
添加回答
舉報