首页 > 解决方案 > 解析 YAML 文件中的单个密钥

问题描述

我有一堆名义上的 YAML 文件,它们实际上可能包含也可能不包含有效的 YAML。

我关心的每个文件中只有少数几个键。我相信这些部分确实包含有效的 YAML。

有没有办法解析 YAML 文件,限制解析的键?

例如,如果我想要的密钥被命名为主机,我希望能够执行以下操作:

with open('maybe_valid.yaml', 'r') as file:
    conf = yaml.load(file, Loader=yaml.SafeLoader, keys=['hosts']) 

如果可以的话,我想避免手动扫描文件中的 key/s 并提取/猜测哪些行是该部分的一部分。

另外,如果我可以限制解析遍历的深度,那也可以。即,如果有办法告诉它只通过顶级节点。

标签: pythonyamlpyyaml

解决方案


不幸的是,如果文件不完全在有效的 yaml 中, yaml.load() 将失败。

一些可以尝试的事情可能包括:

  • 忽略所有没有您关心的密钥字符串的文件
  • 通过 yaml.load() 运行所有文件并跟踪失败的文件。如果失败的 yaml 列表足够短,您可以手动完成。
  • 找出无效 yaml 部分的一致模式,并在尝试 yaml.load() 之前将它们从这些文件中删除。

推荐阅读