我正在尝试加载包含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'}
谢谢!
答案 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字符串,您的生活将会更加轻松:)。