[英]Convert string of list to list of values
我有一个列表字符串,我试图将其转换为列表,但是ast.literal_eval
返回错误:
y = "[
{
'ake_ii': 88888,
'azefmlkh_amrlgba_dd': datetime.datetime(2022, 1, 31, 16, 52),
'sklmfs_qujdf_': datetime.datetime(2022, 1, 31, 23, 4)
}
]"
ast.literal_eval(y)
返回错误
ValueError: malformed node or string: <ast.Call object at 0x7fbaec22da60>
我想要一个返回的列表而不是一个字符串。
这是改编自我的其他相关答案的答案:
import ast
import datetime
data = """
[
{
'ake_ii': 88888,
'azefmlkh_amrlgba_dd': datetime.datetime(2022, 1, 31, 16, 52),
'sklmfs_qujdf_': datetime.datetime(2022, 1, 31, 23, 4)
}
]
""".strip()
def literal_eval_with_datetime(source):
# Adapted from `ast.literal_eval`
def _convert(node):
if isinstance(node, list):
return [_convert(arg) for arg in node]
if isinstance(node, ast.Constant):
return node.value
if isinstance(node, ast.Tuple):
return tuple(map(_convert, node.elts))
if isinstance(node, ast.List):
return list(map(_convert, node.elts))
if isinstance(node, ast.Set):
return set(map(_convert, node.elts))
if isinstance(node, ast.Call) and isinstance(node.func, ast.Name) and node.func.id == 'set' and node.args == node.keywords == []:
return set()
if isinstance(node, ast.Dict):
return dict(zip(map(_convert, node.keys), map(_convert, node.values)))
if isinstance(node, ast.Expression):
return _convert(node.body)
if isinstance(node, ast.Call) and ast.get_source_segment(source, node.func) == 'datetime.datetime':
return datetime.datetime(*_convert(node.args))
return {
f'${node.__class__.__name__}': ast.get_source_segment(source, node),
}
return _convert(ast.parse(source, mode='eval'))
print(literal_eval_with_datetime(data))
output 是(当然是真实列表):
[
{
"ake_ii": 88888,
"azefmlkh_amrlgba_dd": datetime.datetime(2022, 1, 31, 16, 52),
"sklmfs_qujdf_": datetime.datetime(2022, 1, 31, 23, 4),
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.