Чтение списков и сообщений из файла без exec - PullRequest
2 голосов
/ 13 марта 2011

В настоящее время у меня есть этот код, который читает из файла, содержащего что-то похожее на [{'1': {'Score': '2', 'Class': '3'}}], и присваивает его переменной:

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

Однако мне сказали, что использование exec опасно,Как я могу написать тот же код без использования exec?

Ответы [ 2 ]

7 голосов
/ 13 марта 2011

Использование ast.literal_eval():

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

Он будет оценивать только литералы, без вызовов функций или операторов.

1 голос
/ 13 марта 2011
>>> 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'
>>>
...