用 Python 解析 YAML 文件并访问数据?

我是 YAML 的新手,一直在寻找解析 YAML 文件和使用/访问解析后的 YAML 数据的方法。

我遇到过关于如何解析 YAML 文件的解释,例如 PyYAML 教程、“ 如何用 Python 解析 YAML 文件”、“ 将 Python 字典转换为对象?”,但是我没有找到的是一个关于如何从解析的 YAML 文件访问数据的简单示例。

假设我有一个 YAML 文件,比如:

 treeroot:
branch1: branch1 text
branch2: branch2 text

如何访问文本“ Branch 1 text”?

YAML 解析和 Python?”提供了一个解决方案,但是我在访问更复杂的 YAML 文件中的数据时遇到了问题。而且,我想知道是否有一些标准的方法来访问解析后的 YAML 文件中的数据,可能类似于“ 树迭代”或“ 元素路径”表示法或者在解析 XML 文件时使用的东西?

138036 次浏览

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.

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)