【发布时间】:2012-12-16 05:32:55
【问题描述】:
我有两个 python 字典,我想将它们写入一个 yaml 文件,其中包含两个文档:
definitions = {"one" : 1, "two" : 2, "three" : 3}
actions = {"run" : "yes", "print" : "no", "report" : "maybe"}
yaml 文件应如下所示:
--- !define
one: 1
two: 2
three: 3
-- !action
run: yes
print: no
report: maybe
...
使用 PyYaml 我没有找到明确的方法来做到这一点。我确信有一个简单的方法,但是深入研究 PyYaml 文档,只会让我感到困惑。我需要翻斗车、发射器还是什么?这些类型中的每一种产生什么类型的输出? Yaml 文本? yaml 节点? YAML 对象?无论如何,我将不胜感激。
根据以下 unutbu 的回答,这是我能想到的最简洁的版本:
DeriveYAMLObjectWithTag 是一个创建新类的函数,从 YAMLObject 派生并带有所需的标签:
def DeriveYAMLObjectWithTag(tag):
def init_DeriveYAMLObjectWithTag(self, **kwargs):
""" __init__ for the new class """
self.__dict__.update(kwargs)
new_class = type('YAMLObjectWithTag_'+tag,
(yaml.YAMLObject,),
{'yaml_tag' : '!{n}'.format(n = tag),
'__init__' : init_DeriveYAMLObjectWithTag})
return new_class
这里是如何使用 DeriveYAMLObjectWithTag 来获取所需的 Yaml:
definitions = {"one" : 1, "two" : 2, "three" : 3, "four" : 4}
actions = {"run" : "yes", "print" : "no", "report" : "maybe"}
namespace = [DeriveYAMLObjectWithTag('define')(**definitions),
DeriveYAMLObjectWithTag('action')(**actions)]
text = yaml.dump_all(namespace,
default_flow_style = False,
explicit_start = True)
感谢所有回答的人。我似乎在 PyYaml 中缺少功能,这是克服它的最优雅的方法。
【问题讨论】: