6

次の形式で YAML データを継続的に出力するコマンドライン アプリがあります。

- col0: データム0
  col1: データム1
  col2: データム 2
- col0: データム0
  col1: データム1
  col2: データム 2
...

それは永遠にこれを行います。これらの各レコードを継続的に読み取る Python スクリプトを作成したいと思います。

PyYAML ライブラリは、完全に読み込まれた文字列を取得し、それらを完全な YAML ドキュメントとして解釈するのに最適なようです。PyYAML を「ストリーミング」モードにする方法はありますか?

それとも、データを自分でチャンクして、少しずつ PyYAML にフィードする唯一のオプションですか?

4

2 に答える 2

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

誰かがもっとうまくやれるでしょうか?

于 2009-01-10T17:33:00.727 に答える
2

ドキュメント内のストリームへの参照はすべて、ドキュメントのストリームを参照しているようです...私はあなたが説明した方法でそれを使用しようとしたことはありませんが、データをそのようなドキュメントのストリームにチャンクするようです合理的なアプローチ。

于 2009-01-09T19:12:47.467 に答える