如何在Python中处理YAML流

如何在Python中处理YAML流,python,command-line,streaming,yaml,Python,Command Line,Streaming,Yaml,我有一个命令行应用程序,它以以下形式连续输出YAML数据: - col0: datum0 col1: datum1 col2: datum2 - col0: datum0 col1: datum1 col2: datum2 ... -col0:datum0 col1:datum1 col2:datum2 -col0:datum0 col1:datum1 col2:datum2 ... 它永远这样做。我想编写一个Python脚本,连续读取这些记录 PyYAML库似乎最擅长获取完全加

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

- col0: datum0 col1: datum1 col2: datum2 - col0: datum0 col1: datum1 col2: datum2 ... -col0:datum0 col1:datum1 col2:datum2 -col0:datum0 col1:datum1 col2:datum2 ... 它永远这样做。我想编写一个Python脚本,连续读取这些记录

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


或者,我唯一的选择是自己将数据分块并将其逐点输入PyYAML吗?

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

以下是我最终使用的方法,因为似乎没有一种内置的方法来实现我想要的。此函数应该足够通用,可以在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

有人能做得更好吗?

我唯一要做的更改是
如果l.startswith(“”):
如果不是l.startswith('-'):
,因为这解决了将yaml字符串的构建部分提供给yaml加载程序/解析器时与utf8相关的编码问题。我认为这是由于
-
部分中的多行yaml字符串造成的