Вы можете использовать встроенный 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
имеет некоторые риски безопасности.Альтернатива, как упомянуто JBernardo, заключается в использовании 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
вызывает исключение.