【问题标题】:Parsing a YAML file in Python, and accessing the data?在 Python 中解析 YAML 文件并访问数据?
【发布时间】: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 文件时使用的东西?

【问题讨论】:

标签: python xml parsing yaml


【解决方案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.FullLoaderLoader=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)

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 1970-01-01
    • 2010-12-18
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    相关资源
    最近更新 更多