在 Python 中解析 YAML 文件并访问数据?
Posted
技术标签:
【中文标题】在 Python 中解析 YAML 文件并访问数据?【英文标题】:Parsing a YAML file in Python, and accessing the data? 【发布时间】:2011-12-28 23:40:06 【问题描述】:我是 YAML 新手,一直在寻找解析 YAML 文件和使用/访问解析后的 YAML 数据的方法。
我遇到过关于如何解析 YAML 文件的解释,例如 PyYAML tutorial、“How can I parse a YAML file in Python”、“Convert Python dict to object?”,但我没有找到一个简单的例子来说明如何从解析的 YAML 文件中访问数据。
假设我有一个 YAML 文件,例如:
treeroot:
branch1: branch1 text
branch2: branch2 text
如何访问文本“branch1 text”?
"YAML parsing and Python?" 提供了一个解决方案,但我在访问更复杂的 YAML 文件中的数据时遇到了问题。而且,我想知道是否有一些标准方法可以从解析的 YAML 文件中访问数据,可能类似于“tree iteration”或“elementpath”符号或解析 XML 文件时使用的东西?
【问题讨论】:
How can I parse a YAML file in Python的可能重复 【参考方案1】:由于 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
键下。
【讨论】:
我得到“TypeError:字符串索引必须是整数,而不是 str”。看来我不能使用字符串作为索引。 您可能正在尝试访问(索引)一个字符串。你可能走得太深了;您是否已经在尝试访问的元素? @sattu 我遇到了同样的错误,因为我在键和值之间没有任何空格,即“labelsize: 20”而不是“labelsize:20”【参考方案2】:@Aphex 的解决方案仅供参考 -
万一你遇到-
“YAMLLoadWarning:不推荐在没有 Loader=... 的情况下调用 yaml.load()”
您可能想要使用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)
【讨论】:
以上是关于在 Python 中解析 YAML 文件并访问数据?的主要内容,如果未能解决你的问题,请参考以下文章