【问题标题】:How to process a YAML stream in Python如何在 Python 中处理 YAML 流
【发布时间】:2009-01-09 18:29:48
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python command-line streaming yaml


    【解决方案1】:

    这是我最终使用的,因为似乎没有内置方法来完成我想要的。这个函数应该足够通用,它可以读取 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
    

    谁能做得更好?

    【讨论】:

    • 我要做的唯一改变是 if l.startswith(' '):if not l.startswith('-'): 因为这解决了将 yaml 字符串的构建部分提供给 yaml 加载器/解析器时与 utf8 相关的编码问题。我认为这是由于 - 部分中的多行 yaml 字符串
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多