首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NoneType中替换ruamel.yaml代表

如何在NoneType中替换ruamel.yaml代表
EN

Stack Overflow用户
提问于 2021-08-05 16:12:43
回答 1查看 129关注 0票数 1

我正在处理由计算应用程序处理的YAML文件。此应用程序只支持~进行None分配,但ruamel.yaml同时使用''null关键字。

例如:

代码语言:javascript
复制
from ruamel.yaml import YAML

yaml_example = """\
info:
  value1: null
  value2: [5, null, 12]
"""

yaml = YAML()
info = yaml.load(yaml_example)
with open('textfile.yaml', 'w') as file:
    yaml.dump(info, file)

这会让

代码语言:javascript
复制
info:
  value1:
  value2: [5, null, 12]

但是,我需要输出如下所示:

代码语言:javascript
复制
info:
  value1: ~
  value2: [5, ~, 12]

如何使用~获得输出

我已经看过以下问题,但我未能成功地将其应用于ruamel.yaml

Can I dump blank instead of null in yaml/pyyaml?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 16:32:30

您必须为空标记更改代理:

代码语言:javascript
复制
import sys
import ruamel.yaml

yaml_example = """\
info:
  value1: null
  value2: [5, null, 12]
"""

def _represent_none(self, data):
    if len(self.represented_objects) == 0 and not self.serializer.use_explicit_start:
        return self.represent_scalar('tag:yaml.org,2002:null', 'null')
    return self.represent_scalar('tag:yaml.org,2002:null', "~")

ruamel.yaml.representer.RoundTripRepresenter.add_representer(type(None), _represent_none)

yaml = ruamel.yaml.YAML()
info = yaml.load(yaml_example)
yaml.dump(info, sys.stdout)

这意味着:

代码语言:javascript
复制
info:
  value1: ~
  value2: [5, ~, 12]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68670107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档