Comment traiter un flux YAML en Python
-
06-07-2019 - |
Question
J'ai une application en ligne de commande qui affiche en continu les données YAML sous la forme:
- col0: datum0 col1: datum1 col2: datum2 - col0: datum0 col1: datum1 col2: datum2 ...
Il fait cela pour toute l'éternité. J'aimerais écrire un script Python qui lit continuellement chacun de ces enregistrements.
La bibliothèque PyYAML semble être la meilleure solution pour interpréter des chaînes entièrement chargées et les interpréter comme un document YAML complet. Existe-t-il un moyen de placer PyYAML dans un "streaming"? mode?
Ou est-ce que ma seule option est de découper les données moi-même et de les transférer au fur et à mesure dans PyYAML?
La solution
Voici ce que j’ai finalement utilisé car il ne semble pas y avoir de méthode intégrée pour accomplir ce que je veux. Cette fonction doit être suffisamment générique pour qu’elle puisse lire un flux de YAML et renvoyer des objets de niveau supérieur au fur et à mesure de leur rencontre.
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
Quelqu'un peut-il faire mieux?
Autres conseils
Toutes les références à diffuser dans la documentation semblent faire référence à un flux de documents ... Je n'ai jamais essayé de l'utiliser de la manière que vous décrivez, mais il me semble que les données sont regroupées dans un tel flux. des documents est une approche raisonnable.