2017-01-09 5 views
0

Ich habe verschiedene YAML-Dateien mit einer unterschiedlichen Datenstruktur (Beispiel 1). In meinem Projekt muss ich einige Informationen aus diesen Dateien nehmen. Ich habe eine andere YAML-Datei geschrieben, um die Ressourcen zu nutzen, die ich brauche (Beispiel 2).Python: Yaml Daten aus einer anderen Yaml-Datei

  1. Beispieldatei 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. Beispieldatei 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... 
    --- 
    

Ich benutze dieses Skript Informationen zu erhalten, wie "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]) 

Aber wie kann ich Daten in einem Unterpfad wie "my_needed_icon" bekommen? mit früheren Skript bekomme ich den Fehler:

TypeError: unhashable type: 'dict'

Ich kann nur die Struktur der myapp_res.yaml ändern, und meinen Python-Skript offensichtlich.

Antwort

0

Diese Zeile:

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

eine Variable my_resources verwendet, das aus my_data['resources'] zugeordnet vorausgesetzt, Sie sind in der Tat ein Wörterbuch, das (als Index nicht verwendet werden kann, aber es ist eine Vermutung, ist my_resources in nicht definiert deine Quelle).

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

(beachten Sie die abgelegte s von my_resources)

+0

ich gemacht habe einen Fehler gemacht, als ich den Code kopiert haben:

Sie wahrscheinlich zu schreiben bedeutete. Danke für die Korrektur. – Luca

+0

@luca, wenn das das Problem löst, dann markieren Sie bitte die Antwort, dann wissen andere, dass dies Ihr Problem gelöst hat – Anthon

Verwandte Themen