Ваш текстовый файл является допустимым кодом Python, поэтому, если он из надежного источника, вы можете просто сделать:
with open("filename") as f:
exec(f.read())
и переменная d
будет загружена с помощью dict.
Если текстовый файл не из надежного источника, однако, вы можете использовать ast.parse
для разбора кода, а затем ast.walk
для обхода абстрактного синтаксического дерева и поиска узла Dict
. Из соображений безопасности убедитесь, что узел dict не содержит ни одного узла Call
, прежде чем обернуть его как тело узла Expression
и скомпилировать его для eval
, чтобы превратить его в настоящий dict, хранящийся в переменной d
:
import ast
with open("filename") as f:
for node in ast.walk(ast.parse(f.read())):
if isinstance(node, ast.Dict) and \
not any(isinstance(child, ast.Call) for child in ast.walk(node)):
d = eval(compile(ast.Expression(body=node), '', 'eval'))
break
else:
print('No valid dict found.')
Учитывая ваш пример ввода, d
станет:
{'EMS': 1, 'ESC': 2, 'HVAC': 3, 'IC': 4, 'ICU': 5, 'IS': 6, 'ITM': 7, 'MBFM': 8, 'PKE': 9, 'RPAS': 10, 'RVC': 11, 'SAS': 12, 'SRS': 13, 'TCU': 14, 'TPMS': 15, 'VCU': 16, 'BMS': 17, 'MCU': 18, 'OBC': 19}