[英]Load an Python object from File (Maybe without class definition)
我是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()),則會收到錯誤消息。
有什么辦法可以做到嗎? (我沒有任何類定義)
出於安全性考慮,Eval通常是一個糟糕的計划,最好使用pickle或JSON進行序列化。
但這不會讀取,因為您不能使用eval()將=賦值給變量。 如果是正確的格式,則可以嘗試在=之后跳過,然后eval()其余的:
data = open('data.txt').read()
ontology = eval(data[data.find('=')+1:])
使用eval是一個非常糟糕的主意 。 請改用ast.literal_eval 。
為此,您必須擺脫ontology =
part,這不是必需的。 在文件中僅保留字典本身。
然后,按如下方式加載它:
>>> 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']}}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.