我有一个命令行应用程序,它以以下形式连续输出 YAML 数据:
- col0:基准0 col1:基准1 col2:基准2 - col0:基准0 col1:基准1 col2:基准2 ...
它为所有永恒做这件事。我想编写一个 Python 脚本来连续读取这些记录中的每一个。
PyYAML 库似乎最擅长获取完全加载的字符串并将其解释为完整的 YAML 文档。有没有办法将 PyYAML 置于“流”模式?
还是我唯一的选择是自己分块数据并将其一点一点地输入 PyYAML?
我有一个命令行应用程序,它以以下形式连续输出 YAML 数据:
- col0:基准0 col1:基准1 col2:基准2 - col0:基准0 col1:基准1 col2:基准2 ...
它为所有永恒做这件事。我想编写一个 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
谁能做得更好?
文档中对流的所有引用似乎都指的是文档流...我从未尝试以您描述的方式使用它,但似乎将数据分块成这样的文档流是一个合理的方法。