PythonでYAMLストリームを処理する方法
-
06-07-2019 - |
質問
次の形式で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
誰もがもっと良くなることができますか?
他のヒント
ドキュメント内のストリームへのすべての参照は、ドキュメントのストリームを参照しているようです...あなたが説明する方法でそれを使用しようとしたことはありませんが、データをそのようなストリームにチャンクするようですのドキュメントの合理的なアプローチです。
所属していません StackOverflow