如何在Python中处理YAML流

Fra*_*ger 6 python streaming command-line yaml

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

- col0: datum0
  col1: datum1
  col2: datum2
- col0: datum0
  col1: datum1
  col2: datum2
...

它永远都是这样做的.我想写一个Python脚本,不断读取每个记录.

PyYAML库似乎最擅长于完全加载的字符串并将它们解释为完整的YAML文档.有没有办法将PyYAML置于"流媒体"模式?

或者我自己选择将数据分块并一点一点地输入PyYAML?

Fra*_*ger 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
Run Code Online (Sandbox Code Playgroud)

有人能做得更好吗?