簡體   English   中英

從File加載一個Python對象(也許沒有類定義)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM