微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

写入 yaml 时如何删除元类信息?

如何解决写入 yaml 时如何删除元类信息?

import netifaces
import netaddr
import yaml


class Ethernet(yaml.YAMLObject):
    def __init__(self,addresses,gateway4,mtu,nameservers):
        self.nameservers = nameservers
        self.mtu = mtu
        self.gateway4 = gateway4
        self.addresses = addresses

我正在尝试将此类写入 yum 文件

with open("/home/netplan.yaml","w") as file:
    yaml.dump(document,file,default_flow_style=False)

我得到了这个结果:

!!python/object:__main__.Netplan
network: !!python/object:__main__.Network
  ethernets:
    docker0: !!python/object:__main__.Ethernet
      addresses:
      - 172.26.0.1/16
      gateway4: 1.1.1.1
      mtu: 9000

如何删除所有元信息,例如 !!python/object:ma​​in. 来自 yaml 文件

解决方法

我不知道 yum 是什么,但我假设您在谈论 YAML。

您可以定义一个类属性 yaml_tag 来控制序列化您的类时使用的标签。如果将其设置为映射的默认标记,则不会写入:

from yaml.resolver import BaseResolver

class Ethernet(yaml.YAMLObject):
    yaml_tag = BaseResolver.DEFAULT_MAPPING_TAG

    def __init__(self,addresses,gateway4,mtu,nameservers):
        self.nameservers = nameservers
        self.mtu = mtu
        self.gateway4 = gateway4
        self.addresses = addresses

但是请注意,如果您这样做,您将无法再次将 YAML 加载到此类中。

如果您无法控制转储的类型,您可以为它们注册一个自定义代表:

yaml.add_representer(Foo,lambda dumper,data: dumper.represent_mapping(
    BaseResolver.DEFAULT_MAPPING_TAG,data.__dict__))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。