python yaml load_all获取错误的密钥

问题描述 投票:0回答:2

yaml.load all要求在“:”后面有空格以识别正确的密钥。如果找不到空格,它将使用整个键值对作为键,然后将None作为值。

请参见下文:OP打印具有'B2_key:B2_VAL':无

test_item = "A1: {B1_key: b1_val, B2_key:B2_VAL}"
yaml_iterator = yaml.load_all(test_item, Loader=yaml.Loader)
op = {}
for item in yaml_iterator:
    op.update(item)
print(op)

Output print: {'A1': {'B1_key': 'b1_val', 'B2_key:B2_VAL': None}}

我知道我们可以使用正确格式的IP文件。但是有办法解决吗?我希望用户不要在意空格。

一种方法是检查OP字典并在那里处理。

请提供最好的处理方法。预先感谢。

python yaml pyyaml
2个回答
1
投票

YAML syntax明确声明必须在冒号后跟一个空格。因此,您有两个选择:

  1. [要求您的用户使用YAML编写(即使这意味着他们在指定键时必须在冒号后添加一个空格);或,
  2. 使用有点类似于YAML的经过深思熟虑的格式,您尚未为其构建解析器,并且不允许键中带有冒号的键。

转到选项1


0
投票

如果您确实不希望用户关心语法,并且字符串中包含yaml,则可以在分号后添加空格:

test_item = test_item.replace(':', ': ')

输出:

{'A1': {'B1_key': 'b1_val', 'B2_key': 'B2_VAL'}}

但是这仅在键和值中不允许使用分号时才有效。

© www.soinside.com 2019 - 2024. All rights reserved.