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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top