2017-01-09 135 views
0

我有不同的YAML文件与各种数据结构(示例1)。 在我的项目中,我必须从这些文件中获取一些信息。 我写了另一个YAML文件来获取我需要的资源(例子2)。python:从另一个yaml文件的yaml数据

  1. 示例文件res1.yaml

    --- 
    form_title: mytitle 
    icons: 
        1: 
        icon: dog_icon 
        link: '/my/file/path1/file1' 
        2: 
        icon: wolf_icon 
        link: '/my/file/path2/file2' 
        3: 
        icon: cat_icon 
        link: '/my/file/path3/file3' 
        4: 
        icon: rabbit_icon 
        link: '/my/file/path4/file4' 
    --- 
    
  2. 示例文件myapp_res.yaml

    --- 
    resources: 
        1: 
        res: res1.yaml 
        res_type: yaml 
        2: 
        res: res2.jpg 
        res_type: image 
    
    data: 
        my_form_title: 
         res: 1 
         type: text 
         var: 
        form_title 
        my_needed_icon: 
         res: 1 
         type: icon 
         var: 
        icons: 
         1: link 
    #etc... 
    --- 
    

我使用这个脚本来获取信息,如 “my_form_title”:

import ruamel.yaml as yaml 
myapp_res = yaml.load(myapp_res.yaml) 
test_var = "my_form_title" 
my_data = myapp_res["data"][test_var] 
my_resource = my_data["res"] 
my_res_file = myapp_res["resources"][my_resource]["res"] 
yamel_res = yaml.load(my_res_file) 
my_var = my_data["var"] 
print(yamel_res[my_var]) 

但是我怎么能得到像“my_needed_icon”这样的子路径中的数据? 与以前的脚本中,我得到的错误:

TypeError: unhashable type: 'dict'

我只能改变myapp_res.yaml的结构,而且,很显然我的Python脚本。

回答

0

这条线:

my_res_file = myapp_res["resources"][my_resources]["res"] 

使用可变my_resources,假定从my_data['resources']分配,你确实是不能被用作索引字典(但它是猜测,my_resources不限定你的来源)。

你大概意思写:

my_res_file = myapp_res["resources"][my_resource]["res"] 

(注意,从my_resources的下降s

+0

我做的时候我已经复制的代码错误。感谢您的纠正。 – Luca

+0

@luca如果解决了问题,请标记答案,然后其他人知道这解决了您的问题 – Anthon