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

发布于 2024-12-15 08:31:20 字数 969 浏览 0 评论 0原文

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

我遇到过有关如何解析 YAML 文件的解释,例如 PyYAML tutorial, " 如何在 Python 中解析 YAML 文件", “将 Python dict 转换为对象?”,但我还没有找到的是有关如何从解析的 YAML 文件访问数据的简单示例。

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

 treeroot:
     branch1: branch1 text
     branch2: branch2 text

如何访问文本“branch1 text”?

YAML 解析和 Python?”提供了一个解决方案,但我在从更复杂的 YAML 文件。而且,我想知道是否有某种标准方法可以从解析的 YAML 文件访问数据,可能类似于“树迭代”或“elementpath”符号或其他符号解析 XML 文件时使用?

I am new to YAML and have been searching for ways to parse a YAML file and use/access the data from the parsed YAML.

I have come across explanations on how to parse the YAML file, for example, the PyYAML tutorial, "How can I parse a YAML file in Python", "Convert Python dict to object?", but what I haven't found is a simple example on how to access the data from the parsed YAML file.

Assume I have a YAML file such as:

 treeroot:
     branch1: branch1 text
     branch2: branch2 text

How do I access the text "branch1 text"?

"YAML parsing and Python?" provides a solution, but I had problems accessing the data from a more complex YAML file. And, I'm wondering if there is some standard way of accessing the data from a parsed YAML file, possibly something similar to "tree iteration" or "elementpath" notation or something which would be used when parsing an XML file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

要走就滚别墨迹 2024-12-22 08:31:20

由于 PyYAML 的 yaml.load() 函数将 YAML 文档解析为原生 Python 数据结构,因此您只需按键或索引访问项目即可。使用您链接的问题中的示例:

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

要访问 branch1 文本,您将使用:

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

因为在您的 YAML 文档中,branch1 键的值位于 树根 键。

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.

能怎样 2024-12-22 08:31:20

仅供参考 @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)

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文