从没有exec的文件中读取列表和dicts

时间:2011-03-12 22:57:27

标签: python io exec unsafe

目前我有这段代码,它从包含类似[{'1': {'Score': '2', 'Class': '3'}}]的文件中读取并将其分配给变量:

exec('assigns = ' + open(r'D:\Dropbox\Dev\Output\dict', 'r').read())

但是,我被告知使用exec是危险的。如何在不使用exec的情况下编写相同的代码?

2 个答案:

答案 0 :(得分:7)

使用ast.literal_eval()

assigns = ast.literal_eval(open(r'D:\Dropbox\Dev\Output\dict', 'r').read())

它只会评估文字,没有函数调用或运算符。

答案 1 :(得分:1)

>>> data = """[{'1': {'Score': '2', 'Class': '3'}}]""" # example; get this from file
>>> import ast
>>> x = ast.literal_eval(data)
>>> x[0]
{'1': {'Score': '2', 'Class': '3'}}
>>> x[0]['1']
{'Score': '2', 'Class': '3'}
>>> x[0]['1']['Class']
'3'
>>>