Wie ein YAML-Stream in Python verarbeiten
-
06-07-2019 - |
Frage
Ich habe eine Befehlszeile app die kontinuierlich ausgibt YAML Daten in der Form:
- col0: datum0 col1: datum1 col2: datum2 - col0: datum0 col1: datum1 col2: datum2 ...
Es tut dies für alle Ewigkeit. Ich möchte ein Python-Skript schreiben, die kontinuierlich jede dieser Aufzeichnungen liest.
Die PyYAML Bibliothek scheint am besten bei vollständig geladenen Strings zu nehmen und diese als komplettes YAML Dokument zu interpretieren. Gibt es eine Möglichkeit PyYAML in einen „Streaming“ -Modus zu setzen?
Oder ist meine einzige Option, um chunk die Daten selbst und er Stück für Stück in PyYAML?
Lösung
Hier ist, was ich am Ende mit, da es keine integrierte Methode für die Erfüllung zu sein scheint, was ich will. Diese Funktion sollte allgemein genug sein, dass es in einem Strom von YAML lesen und Top-Level-Objekten zurück, wie sie angetroffen werden.
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
Kann jemand besser machen?
Andere Tipps
Alle diese Referenzen in der Dokumentation zu streamen scheinen zu einem Strom von Dokumenten zu beziehen ... Ich habe nie versucht, es in der Art und Weise zu verwenden, die Sie beschreiben, aber es scheint, als ob die Daten in einem solchen Strom Chunking von Dokumenten ist ein sinnvoller Ansatz.