2017-09-01 100 views
1

我有一個簡單的Python 2.7.12腳本運行在Linux和OSX提供相同的輸出。在轉儲期間使用ruamel時,布爾值的值似乎轉換爲全部小寫。作爲字段轉換爲不帶引號字符串的測試,不存在大小寫轉換。ruamel.yaml轉儲不保留布爾值的情況下

文件: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

回答

2

你混合舊的API(ruamel.yaml.round_trip_dump())的新API(yaml = YAML()),這是可能的,但不是必需的(不推薦)。

ruamel.yaml不會保留您的布爾(FalseFALSE)的外殼,但也可以使用boolean_representation屬性來設置轉儲使用的值(這當然會影響所有布爾):

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: "" 
+0

感謝有關混合調用的說明。粉筆它從SO複製/粘貼。這被證實能夠讓我的布爾變得更好,並且按照我們的需要進行格式化。 – TripodNH

+0

順便說一句,如果你想刪除最後一個新的API,你應該這樣做:'yaml.dump(config,sys.stdout,transform = lambda data:data.rstrip())' – Anthon

+0

它就像你讀我的心靈因爲我試圖找出如何用新的API來做到這一點。所以我的命令'yaml.dump(config,stream = open(config_path,'w'),transform = lambda data:data.rstrip())'完全符合我的要求。 – TripodNH

相關問題