如何在Python中解析YAML文件并访问数据?
我刚接触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
这个键下面的。