Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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, "How can I parse a YAML file in Python", "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"?

"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?

like image 898
9monkeys Avatar asked Nov 14 '11 20:11

9monkeys


People also ask

How do I read a YAML config file in Python?

Reading a key from YAML config file We can read the data using yaml. load() method which takes file pointer and Loader as parameters. FullLoader handles the conversion from YAML scalar values to the Python dictionary. The index [0] is used to select the tag we want to read.

Does Python have a built in YAML parser?

However, Python lacks built-in support for the YAML data format, commonly used for configuration and serialization, despite clear similarities between the two languages. In this tutorial, you'll learn how to work with YAML in Python using the available third-party libraries, with a focus on PyYAML.


2 Answers

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.

like image 174
Aphex Avatar answered Sep 28 '22 10:09

Aphex


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) 
like image 35
Raja Sarkar Avatar answered Sep 28 '22 11:09

Raja Sarkar