2011-11-14 17 views
60

Soy nuevo en YAML y he estado buscando formas de analizar un archivo YAML y utilizar/acceder a los datos del YAML analizado.Analizando un archivo YAML en Python, y accediendo a los datos?

me he encontrado explicaciones sobre cómo analizar el archivo YAML, por ejemplo, el PyYAML tutorial, "How can I parse a YAML file in Python", "Convert Python dict to object?", pero lo que no he encontrado es un ejemplo sencillo de cómo acceder a los datos de el archivo YAML analizado

Supongamos que tengo un archivo YAML, tales como:

treeroot: 
    branch1: branch1 text 
    branch2: branch2 text 

¿Cómo se accede al texto "Texto BRANCH1"?

"YAML parsing and Python?" proporciona una solución, pero tuve problemas para acceder a los datos de un archivo YAML más complejo. Y, me pregunto si hay alguna forma estándar de acceder a los datos de un archivo YAML analizado, posiblemente algo similar a la notación "tree iteration" o "elementpath" o algo que se utilizaría al analizar un archivo XML?

+0

Posible duplicado de [Cómo puedo analizar un archivo YAML en Python] (https://stackoverflow.com/questions/1773805/how-can-i-parse-a-yaml-file-in-python) – fmsf

Respuesta

117

Dado que la función yaml.load() de PyYAML analiza documentos YAML en estructuras de datos nativas de Python, solo puede acceder a los elementos por clave o índice. Usando el ejemplo de la cuestión se conectó:

import yaml 
with open('tree.yaml', 'r') as f: 
    doc = yaml.load(f) 

Para acceder a branch1 text se debería utilizar:

txt = doc["treeroot"]["branch1"] 
print txt 
"branch1 text" 

porque, en su documento YAML, el valor de la clave branch1 está bajo la clave treeroot.

+2

I obtener "TypeError: los índices de cadena deben ser enteros, no str". Parece que no puedo usar una cadena para indexar. – sattu

+0

Probablemente intente acceder (indexar) a una cadena. Es posible que estés yendo demasiado profundo; ¿ya estás en el elemento al que intentas acceder? – Aphex

+0

@sattu Tuve el mismo error porque no tenía ningún espacio entre la clave y el valor, es decir, "tamaño de etiqueta: 20" en lugar de "tamaño de etiqueta: 20" – mateuszb