python yaml加载格式化的字符串

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

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

我在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'}

谢谢!

python yaml pyyaml
1个回答
0
投票

[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字符串,您的生活将会更加轻松:)。

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