如何解决写入 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:main. 来自 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 举报,一经查实,本站将立刻删除。