使用Python轻松发送YAML

时间:2012-06-12 14:18:20

标签: python yaml

我有这个数字代码到目前为止,在计算运行时提供了一些print个信息。

为了让我更容易处理信息,我正在使用YAML。对于C ++,存在以下语法

YAML::Emitter out;
out << YAML::BeginSeq;
out << "eggs";
out << "bread";
out << "milk";
out << YAML::EndSeq;

这很好用。我现在想知道Python是否存在类似的东西。 我刚才遇到的一个粗略的等价物是PyYAML,相当于上面的内容 - 如果我没弄错的话 - 看起来像

print yaml.emit([yaml.StreamStartEvent(),
                 yaml.DocumentStartEvent(),
                 yaml.SequenceStartEvent(anchor=None, tag=None, implicit=True),
                 yaml.ScalarEvent(anchor=None, tag=None, implicit=(True, False), value=u'eggs'),
                 yaml.ScalarEvent(anchor=None, tag=None, implicit=(True, False), value=u'bread'),
                 yaml.ScalarEvent(anchor=None, tag=None, implicit=(True, False), value=u'milk'),
                 yaml.SequenceEndEvent()
               ])
哇,这很冗长。你知道一个不那么详细的语法/ Python YAML包吗? 当然总是yaml.dump(),但重要的是数据立即被写出来。

1 个答案:

答案 0 :(得分:1)

PyYAML尝试确保其输出始终格式正确,因此您无法发出部分文档。

解决方案是始终发出完整的文档!

import yaml
print yaml.dump(["eggs", "bread", "milk", "squick"], explicit_start=True)
print yaml.dump(dict(a=1, b=2, c=3), explicit_start=True)

这将输出包含2个文档的流,您可以使用yaml.load_all加载。