Вы можете использовать встроенную функцию eval
. Например, это будет работать, если каждая запись словаря находится на другой строке:
dicts_from_file = []
with open('myfile.txt','r') as inf:
for line in inf:
dicts_from_file.append(eval(line))
# dicts_from_file now contains the dictionaries created from the text file
В качестве альтернативы, если файл представляет собой один большой словарь (даже в несколько строк), вы можете сделать это:
with open('myfile.txt','r') as inf:
dict_from_file = eval(inf.read())
Это, наверное, самый простой способ сделать это, но не самый безопасный. Как уже упоминалось в их ответах, eval
имеет некоторые неотъемлемые риски безопасности. Альтернативой, как упоминал Дж. Бернардо, является использование ast.literal_eval
, что намного безопаснее, чем eval, поскольку он будет оценивать только строки, содержащие литералы. Вы можете просто заменить все вызовы eval
в приведенных выше примерах на ast.literal_eval
после импорта модуля ast
.
Если вы используете Python 2.4, у вас не будет модуля ast
и у вас не будет with
. Код будет выглядеть примерно так:
inf = open('myfile.txt','r')
dict_from_file = eval(inf.read())
inf.close()
Не забудьте позвонить inf.close()
. Прелесть операторов with
в том, что они делают это за вас, даже если блок кода в операторе with
вызывает исключение.
person
Steven T. Snyder
schedule
16.02.2012
ast
появился в версии 2.5, но не имел вспомогательных функций (таких какliteral_eval
). Они появились в 2.6. - person Steven T. Snyder   schedule 16.02.2012