6

我有一个命令行应用程序,它以以下形式连续输出 YAML 数据:

- col0:基准0
  col1:基准1
  col2:基准2
- col0:基准0
  col1:基准1
  col2:基准2
...

它为所有永恒做这件事。我想编写一个 Python 脚本来连续读取这些记录中的每一个。

PyYAML 库似乎最擅长获取完全加载的字符串并将其解释为完整的 YAML 文档。有没有办法将 PyYAML 置于“流”模式?

还是我唯一的选择是自己分块数据并将其一点一点地输入 PyYAML?

4

2 回答 2

4

这是我最终使用的,因为似乎没有内置的方法来完成我想要的。这个函数应该足够通用,它可以读取 YAML 流并在遇到顶级对象时返回它们。

def streamInYAML(stream):
    y = stream.readline()
    cont = 1
    while cont:
        l = stream.readline()
        if len(l) == 0:
            cont = 0
        else:
            if l.startswith(' '):
                y = y + l
            else:
                yield yaml.load(y)
                y = l

谁能做得更好?

于 2009-01-10T17:33:00.727 回答
2

文档中对流的所有引用似乎都指的是文档流...我从未尝试以您描述的方式使用它,但似乎将数据分块成这样的文档流是一个合理的方法。

于 2009-01-09T19:12:47.467 回答