python⽣成yaml⽂件_python–给PyYaml⽣产的YAML添加注
您可能有⼀些代理⼈为MyObj类,默认情况下倾销(print(yaml.dump(MyObj())))与PyYAML将给你:
!!python/object:__main__.MyObj {}
PyYAML只能在所需输出中的注释中做⼀件事:丢弃它们.如果你会读出所需的输出,你会结束
包含⼀个dict({‘boby’:{‘age’:34}}),你不会得到⼀个MyObj()实例,因为没有标签信息)
我开发的PyYAML的增强版本(ruamel.yaml)可以在YAML中阅读评论,保留评论并在倾销时写评论.
如果您读取所需的输出,则⽣成的数据将会像⼀个包含dict的dict⼀样(和⾏为),但是实际上有更复杂的数据结构可以处理注释.然⽽,您可以创建该结构,当ruamel.yaml要求转储MyObj的实例时,如果您添加了该时间的注释,您将获得所需的输出.
from __future__ import print_function
import sys
import ruamel.yaml
from ruamel.yamlments import CommentedMap
class MyObj():
name = "boby"
age = 34
def convert_to_yaml_struct(self):
x = CommentedMap()
a = CommentedMap()
x[data.name] = a
x.yaml_add_eol_comment('this is the name', 'boby', 11)
a['age'] = data.age
a.yaml_add_eol_comment('in years', 'age', 11)
return x
@staticmethod
python怎么读取py文件def yaml_representer(dumper, data, flow_style=False):
assert isinstance(dumper, ruamel.yaml.RoundTripDumper)
present_vert_to_yaml_struct())
ruamel.yaml.RoundTripDumper.add_representer(MyObj, MyObj.yaml_representer)
und_trip_dump(MyObj(), sys.stdout)
哪个打印:
boby: # this is the name
age: 34 # in years
创建CommentedMap实例之前,⽆需等待,直到您要表⽰MyObj实例为⽌.我会将名称和年龄变成属性,以获取/设置值从或⾼于CommentedMap.这样,您可以在调⽤yaml_representer静态⽅法来表⽰MyObj实例之前更容易地添加注释.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。