如何强制Python yaml.YAMLObject转储人类可读的格式?

时间:2015-09-22 09:19:04

标签: python python-2.7 yaml

我想改进YAML语法以使人类可读的交换格式。

我有这样的代码:

import yaml

class YamlFileLoader(yaml.Loader):
  pass

class YamlFileDumper(yaml.Dumper):
  pass

class YAMLPerson(yaml.YAMLObject):
  yaml_tag = u'!person'
  yaml_flow_style = False
  def __init__(self):
    self.first_name = u'John'
    self.last_name = u'Doe'

y = YAMLPerson()
print yaml.dump(y)

它产生的输出很少:

!person
first_name: !!python/unicode 'John'
last_name: !!python/unicode 'Doe'

如何将其转换为漂亮的人类可读语法:

person:
  first_name: 'John'
  last_name: 'Doe'

我应该添加哪些最小代码?

1 个答案:

答案 0 :(得分:2)

变色龙,

我通过谷歌发布了你的帖子,因为我也在寻找同样的帖子。我找到了答案并想到与你分享。

使用“default_flow_style = False”,使输出可读。请参阅示例代码。

import yaml

yaml_sample = """
  a: 1
  b:
    c: 3
    d: 4
"""

my_yaml = yaml.load(yaml_sample)

print "default style True == \n", yaml.dump(my_yaml)
print "default style False == \n", yaml.dump(my_yaml, default_flow_style=False)

输出,

default style True == 
a: 1
b: {c: 3, d: 4}

default style False == 
a: 1
b:
  c: 3
  d: 4