如何在Python中解析YAML文件并访问数据?

96 投票
2 回答
146581 浏览
提问于 2025-04-17 06:19

我刚接触YAML,正在寻找解析YAML文件的方法,以及如何使用和访问解析后的数据。

我看到了一些关于如何解析YAML文件的解释,比如PyYAML的教程,还有"如何在Python中解析YAML文件"和"将Python字典转换为对象?",但我没有找到一个简单的例子,说明如何访问解析后的YAML文件中的数据。

假设我有一个这样的YAML文件:

 treeroot:
     branch1: branch1 text
     branch2: branch2 text

我该如何访问文本“branch1 text”?

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

2 个回答

13

给大家一个小提示,关于@Aphex的解决方案 -

如果你遇到这个问题 -

"YAMLLoadWarning: 调用 yaml.load() 时没有指定 Loader=... 已经不推荐使用了"

你可以考虑使用 Loader=yaml.FullLoader 或者 Loader=yaml.SafeLoader 这个选项。

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)
165

因为 PyYAML 的 yaml.load() 函数可以把 YAML 文档解析成 Python 里面能用的数据结构,所以你可以直接通过键或者索引来访问里面的内容。举个你提到的例子:

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

如果你想访问 branch1 text,你可以这样做:

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

这是因为在你的 YAML 文档中,branch1 这个键的值是在 treeroot 这个键下面的。

撰写回答