質問

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

- 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

誰もがもっと良くなることができますか?

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top