我是Python的新手。
我的数据格式如下:
ontology = {
'OBJECT' :
{'IS-A' : {'VALUE' :'ALL'},
'SUBCLASSES' : {'VALUE' :['PHYSICAL-OBJECT',
'MENTAL-OBJECT','SOCIAL-OBJECT']},
'THEME-OF' : {'sem' : 'EVENT'}},
'PHYSICAL-OBJECT' :
{'IS-A' : {'VALUE' :'OBJECT'},
'SUBCLASSES' : {'VALUE' :['ANIMATE', 'INANIMATE']},
'THEME-OF' : {'sem' : 'EVENT'}},
}
我想将所有这些数据加载到Python字典中。 但是如果我使用了eval(file.read()),我会收到错误。
我有什么方法可以做到这一点? (我没有任何课程定义)
答案 0 :(得分:0)
出于安全原因,Eval通常是一个糟糕的计划,你最好使用pickle或JSON进行序列化。
但是它不会被读取,因为您无法使用eval()分配变量=。如果这是确切的格式,你可以尝试在=和eval()之后跳过其余的:
data = open('data.txt').read()
ontology = eval(data[data.find('=')+1:])
答案 1 :(得分:0)
Using eval is a really bad idea。请改用ast.literal_eval。
为了实现这一目标,你必须摆脱ontology =
部分,这是不需要的。只在文件中保留字典本身。
然后,按如下方式加载:
>>> import ast
>>> with open('data.txt') as file:
... data = ast.literal_eval(file.read())
...
>>> data
{'PHYSICAL-OBJECT': {'IS-A': {'VALUE': 'OBJECT'}, 'THEME-OF': {'sem': 'EVENT'}, 'SUBCLASSES': {'VALUE': ['ANIMATE', 'INANIMATE']}}, 'OBJECT': {'IS-A': {'VALUE': 'ALL'}, 'THEME-OF': {'sem': 'EVENT'}, 'SUBCLASSES': {'VALUE': ['PHYSICAL-OBJECT', 'MENTAL-OBJECT', 'SOCIAL-OBJECT']}}}