![](/img/trans.png)
[英]Python ruamel.yaml - preserving single quote in value while dumping yaml
[英]how to keep null value in yaml file while dumping though ruamel.yaml
我有YAML文件site.yaml
:
Kvm_BLOCK:
ip_address: 10.X.X.X
property: null
server_type: zone
加载然后转储:
ruamel.yaml.dump(site_yaml, new_file, Dumper=ruamel.yaml.RoundTripDumper)
它成为了
Kvm_BLOCK:
ip_address: 10.X.X.X
property:
server_type: zone
如何在属性块中保留此null
值
该null
在YAML 1.2(构造为Python的值None
)可被表示为null
, Null
, NULL
和~
,作为指定这里 。
另外 :
具有空内容的节点被解释为它们是具有空值的普通标量。 这些节点通常被解析为“空”值。
因此,当使用RoundTripDump
时,您的null
值不会被ruamel.yaml
null
的默认表示形式表示。 如果再次加载该输出,则再次获得一个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')
yaml = ruamel.yaml.YAML()
yaml.representer.add_representer(type(None), my_represent_none)
data = yaml.load(yaml_str)
yaml.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
子类的方式ruamel.yaml.scalarstring.py
以不同的方式表示一个字符串(双引号,单引号,文字块样式标量)。问题是你不能将NoneType
子类NoneType
所以这不像字符串标量那样容易透明地完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.