将缩进不正确的 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 文件。其他任何事情都太费力了。
有一个缩进错误的 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 文件。其他任何事情都太费力了。