1

我有这个数字代码,到目前为止,它有一堆prints 在计算运行时提供几条信息。

为了让我更容易处理信息,我使用 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()有,但重要的是要立即写出数据。

4

1 回答 1

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.

于 2012-06-12T15:15:14.610 回答