【问题标题】:Parse Single Key in YAML File解析 YAML 文件中的单个密钥
【发布时间】:2021-11-03 20:47:24
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 没有办法做到这一点:如果文件实际上不是有效的 YAML,YAML 解析器将无法找到 hosts 键。一旦命中无效数据,所有赌注都将关闭。如果不解析整个文件,就无法识别“仅顶级节点”。也许您可以提前应用一些文本操作来清理数据,或者只提取您想要的部分?

标签: python yaml pyyaml


【解决方案1】:

很遗憾,如果文件不完全位于有效的 yaml 中,yaml.load() 将失败。

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

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

【讨论】:

    猜你喜欢
    • 2020-10-11
    • 2012-10-31
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多