Parsing a YAML file in Python, and accessing the data?

PythonXmlParsingYaml

Python Problem Overview


I am new to YAML and have been searching for ways to parse a YAML file and use/access the data from the parsed YAML.

I have come across explanations on how to parse the YAML file, for example, the PyYAML tutorial, "https://stackoverflow.com/questions/1773805/best-way-to-parse-a-yaml-file";, "https://stackoverflow.com/questions/1305532/convert-python-dict-to-object";, but what I haven't found is a simple example on how to access the data from the parsed YAML file.

Assume I have a YAML file such as:

 treeroot:
     branch1: branch1 text
     branch2: branch2 text

How do I access the text "branch1 text"?

"https://stackoverflow.com/questions/6866600/yaml-parsing-and-python" provides a solution, but I had problems accessing the data from a more complex YAML file. And, I'm wondering if there is some standard way of accessing the data from a parsed YAML file, possibly something similar to "tree iteration" or "elementpath" notation or something which would be used when parsing an XML file?

Python Solutions


Solution 1 - Python

Since PyYAML's yaml.load() function parses YAML documents to native Python data structures, you can just access items by key or index. Using the example from the question you linked:

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

To access branch1 text you would use:

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

because, in your YAML document, the value of the branch1 key is under the treeroot key.

Solution 2 - Python

Just an FYI on @Aphex's solution -

In case you run into - >"YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated"

you may want to use the Loader=yaml.FullLoader or Loader=yaml.SafeLoader option.

import yaml 

with open('cc_config.yml', 'r') as f:
    doc = yaml.load(f, Loader=yaml.FullLoader) # also, yaml.SafeLoader

txt = doc["treeroot"]["branch1"]
print (txt)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Question9monkeysView Question on Stackoverflow
Solution 1 - PythonAphexView Answer on Stackoverflow
Solution 2 - PythonRaja SarkarView Answer on Stackoverflow