将缩进不正确的 YAML 文件转换为 python 字典

Convert incorrectly indented YAML file to python dictionary

有一个缩进错误的 yaml 文件,如下所示:

name:  testing
date:       2020-07-13
version:    1.0
targets:
  - sequence: 1
   name:     Book1
    author: abc
  - sequence:   2
    name:   Book2    
   author: xyz

如果我尝试使用 pyYAML 加载它,将会出现解析器异常,例如:

yaml.parser.ParserError: while parsing a block collection
  in "E:/test.yaml", line 5, column 3
expected <block end>, but found '<block mapping start>'
  in "E:/test.yaml", line 6, column 4

如何在不手动修复缩进的情况下将这个有缩进问题的yaml转换为dict? 或者无论 yaml 如何缩进都转换为 dict?

加载任何类型的结构化数据总是需要某种语法规范,无论是通过规范文档明确显示,还是仅通过编写加载它的代码隐式显示。

YAML 有明确的规范。您显示的文件与 YAML 语法不匹配,因此 不是 YAML。它有点不是YAML,但一点也不

如果你想加载文件而不考虑缩进,这与 YAML 无关了。您需要定义一个语法(可能派生自 YAML)来理解您的文件,然后您需要实现它。

您可以编写一些 sed 或 awk 命令来修复这个特定文件,但它不能轻易通用化,因为您需要一个合适的 YAML 解析器来检测错误的缩进。

因此,现实的解决方案是要求提供您输入的任何人为您提供有效的 YAML 文件。其他任何事情都太费力了。