ruamel.yaml 转储不保留布尔值大小写



我有一个简单的Python 2.7.12脚本在Linux和OSX上运行,可提供相同的输出。在垃圾场期间使用Ruamel时,布尔值的值似乎转换为所有小写。作为测试,当字段转换为未引用的字符串时,没有情况转换。

文件: test.yml

namespace: default
testapp_appname: testapp
images:
  testapp:
    path: "foo/testapp"
    tag: "202120810083053-1.2.3"
testapp_replicas: 1
testapp_monitoring_enabled: False
testapp_node_selector: ""

我的简单测试脚本:

import ruamel
import sys
from ruamel.yaml import YAML
yaml = YAML()

def main():
    config_path = "test.yml"
    image = "testapp"
    timestamp = "202120810083053-"
    version = "1.2.3"
    config = ruamel.yaml.round_trip_load(open(config_path), preserve_quotes=True)
    config['images'][image]['tag'] = "{}{}".format(timestamp, version)
    ruamel.yaml.round_trip_dump(config, sys.stdout)
if __name__ == "__main__":
    main()

输入:

testapp_monitoring_enabled: False

输出:

testapp_monitoring_enabled: false

您将新的API(yaml = YAML())与旧的API(ruamel.yaml.round_trip_dump())混合在一起,这是可能的,但不是必需的(也不建议)。

ruamel.yaml不能保留布尔值的外壳( FalseFALSE),但是可以使用boolean_rementation属性在转储中设置使用的值(这当然会影响所有booleans):

>
import sys
from ruamel.yaml import YAML
yaml = YAML()
yaml.preserve_quotes = True
yaml.boolean_representation = ['False', 'True']
def main():
    config_path = "test.yml"
    image = "testapp"
    timestamp = "202120810083053-"
    version = "1.2.3"
    config = yaml.load(open(config_path))
    config['images'][image]['tag'] = "{}{}".format(timestamp, version)
    yaml.dump(config, sys.stdout)
if __name__ == "__main__":
    main()

会得到您:

namespace: default
testapp_appname: testapp
images:
  testapp:
    path: "foo/testapp"
    tag: "202120810083053-1.2.3"
testapp_replicas: 1
testapp_monitoring_enabled: False
testapp_node_selector: ""

最新更新