python yaml加载格式化的字符串

时间:2019-11-12 16:20:41

标签: python yaml pyyaml

我正在尝试加载包含python格式字符串的yaml,例如test: {formatted_string}。这将允许我使用dictionary["test"].format(formatted_string="hello yaml")格式化字符串,但是在加载yaml时,它将自动转换为{'test': {'formatted_string': None}}而不是{'test': '{formatted_string}'}

已经有数十种.yaml文件已经以这种方式格式化。

我在pyyaml文档中或SO的任何地方都看不到这一点。

为清楚起见,代码完整:

import yaml


data = """
test: {formatted_string}
"""
d1 = yaml.load(data)
print(d1)
# {'test': {'formatted_string': None}}

d2 = {"test": "{formatted_string}"}
print(d2)
# {'test': '{formatted_string}'}

d2["test"] = d2["test"].format(formatted_string="hello yaml")
print(d2)
# {'test': 'hello yaml'}

谢谢!

1 个答案:

答案 0 :(得分:1)

YAML中的{字符(如JSON)引入了字典。就是这样:

a_dictionary:
  key1: value1
  key2: value2

完全等同于:

a_dictionary: {key1: value1, key2: value2}

所以当你写...

test: {formatted_string}

...您正在向YAML解析器介绍字典,并且该字典具有单个键(formatted_string)并且没有值。如果要将{用作YAML value 的一部分,则需要将其引号:

test: "{formatted_string}"

比较:

>>> yaml.safe_load('test: {formatted_string}')
{'test': {'formatted_string': None}}
>>> yaml.safe_load('test: "{formatted_string}"')
{'test': '{formatted_string}'}

通常,如果您总是引用YAML字符串,您的生活将会更加轻松:)。