如何在Python中处理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文档。有没有办法让PyYAML进入“流”模式如何在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库似乎最擅长获取完全加
或者,我唯一的选择是自己将数据分块并将其逐点输入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字符串造成的