Sat*_*346 6 python yaml pyyaml ruamel.yaml
我有YAML文件site.yaml:
Kvm_BLOCK:
ip_address: 10.X.X.X
property: null
server_type: zone
Run Code Online (Sandbox Code Playgroud)
加载然后转储为:
ruamel.yaml.dump(site_yaml, new_file, Dumper=ruamel.yaml.RoundTripDumper)
Run Code Online (Sandbox Code Playgroud)
它成为了
Kvm_BLOCK:
ip_address: 10.X.X.X
property:
server_type: zone
Run Code Online (Sandbox Code Playgroud)
如何null在属性块中保留此值
Ant*_*hon 10
的null(构造为Python的在YAML 1.2值None)可以表示为null,Null,NULL和~,作为指定这里。
另外:
具有空内容的节点被解释为好像它们是具有空值的普通标量。此类节点通常解析为“空”值。
因此,您的null值并没有消失,它只是null在ruamel.yaml使用RoundTripDump. 如果您再次加载该输出,您将再次获得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)
Run Code Online (Sandbox Code Playgroud)
这将转储:
Kvm_BLOCK:
ip_address: 10.X.X.X
property: NULL
server_type: zone
Run Code Online (Sandbox Code Playgroud)
您可以通过在 Python 中创建不同的类(NULL、Null、null等)来获得更细粒度的控制,并为每个string类ruamel.yaml.scalarstring.py使用不同的表示器(与 中的子类用于以不同方式表示字符串的方式非常相似(双引号,单引号,文字块样式标量)。问题是你不能子类化,NoneType所以这不像字符串标量那样容易透明地完成。
| 归档时间: |
|
| 查看次数: |
1809 次 |
| 最近记录: |