2017-06-01 24 views

回答

2

在YAML 1.2 null值(構造爲Python的None)可以被表示爲nullNullNULL~,作爲指定here

Additionally

節點與空內容就好像它們是具有空值簡單的標量被解釋。這些節點通常被解析爲「空」值。

因此您null值還沒有走,用RoundTripDump當它正代表了不同的由null默認表示在ruamel.yaml。如果再次加載該輸出,你再一次得到None作爲價值的關鍵property


如果不是根據自己的喜好,你可以做所有None/null值改變輸出

import sys 
import ruamel.yaml 


yaml_str = """\ 
Kvm_BLOCK: 
    ip_address: 10.X.X.X 
    property: null 
    server_type: zone 
""" 


def my_represent_none(self, data): 
    return self.represent_scalar(u'tag:yaml.org,2002:null', u'NULL') 

ruamel.yaml.RoundTripRepresenter.add_representer(type(None), my_represent_none) 

data = ruamel.yaml.round_trip_load(yaml_str) 
ruamel.yaml.round_trip_dump(data, sys.stdout) 

這將轉儲:

Kvm_BLOCK: 
    ip_address: 10.X.X.X 
    property: NULL 
    server_type: zone 

你可以得到精通過在Python中創建不同的類(NULL,Null,null等),併爲它們中的每一個指定不同的代表(與ruamel.yaml.scalarstring.py中的string子類用於以不同方式表示字符串(雙引用,單引號,文字塊樣式標量)。問題是你不能繼承NoneType的子類,所以這不像字符串標量那樣容易透明。