Seite 1 von 1
PyYaml Problem beim Laden
Verfasst: Donnerstag 11. Februar 2016, 11:24
von locutus
Moin Moin,
vermutlich ist es schnell geklärt, aber ich bin ein Neuling was Yaml angeht
Also: Ich habe eine Datei im Yaml-Format mit Logging-Daten, wo jedes Sample mit einem eigenen Header beginnt, wo Zeitstempel etc. untergebracht sind:
Code: Alles auswählen
header:
seq: 153813
stamp:
secs: 1441716503
nsecs: 590274915
frame_id:
...
da viele samples in der Datei abgelegt sind, kommt auch dieser Header dementsprechend angepasst oft vor. Wenn ich jetzt die Datei in Python mit dem yaml Modul lade:
Code: Alles auswählen
file_obj = open(filename, "r")
loaded = yaml.load(file_obj, Loader=yaml.CLoader)
file_obj.close()
ist loaded allerdings nur das letzte sample, ich bräuchte allerdings alle. Danach auf die einzelnen keys zugreifen etc. ist kein Problem, aber warum kommt nur das letzte Sample? Überschreibt er beim Laden alles bisherige, wenn ein key erneut auftaucht? (In diesem Fall ja 'header')
Vielen Dank schon einmal!
Re: PyYaml Problem beim Laden
Verfasst: Donnerstag 11. Februar 2016, 11:43
von Sirius3
@locutus: wenn das wirklich so in der Datei steht, ist die oberste Ebene ein Wörterbuch und darin kann jeder Schlüssel nur einmal vorkommen. Die Antwort auf die letzte Frage ist also: ja. Wer erzeugt diese Datei? Kann man dem Erzeuger beibringen eine Liste anzulegen?
Re: PyYaml Problem beim Laden
Verfasst: Donnerstag 11. Februar 2016, 11:52
von locutus
@Sirius3:
Danke für die Antwort!
Habe die Datei so bekommen, gut, dass mein Verdacht richtig war.
Jetzt weiß ich, in welche Richtung ich weiter probieren kann

Re: PyYaml Problem beim Laden
Verfasst: Donnerstag 11. Februar 2016, 12:14
von BlackJack
@locutus: Wobei YAML ja durchaus mehrere YAML-Dokumente in einer Datei speichern kann. Wenn die syntaktisch nicht getrennt sind, hat der Erzeuger der Datei an dieser Stelle Mist gebaut würde ich sagen:
Code: Alles auswählen
In [19]: !cat test.yaml
header:
seq: 153813
stamp:
secs: 1441716503
nsecs: 590274915
frame_id:
---
header:
seq: 4711
stamp:
secs: 42
nsecs: 23
frame_id:
...
In [20]: f = open('test.yaml')
In [21]: for sample in yaml.load_all(f):
....: print sample
....:
{'header': {'stamp': {'secs': 1441716503, 'nsecs': 590274915}, 'frame_id': None, 'seq': 153813}}
{'header': {'stamp': {'secs': 42, 'nsecs': 23}, 'frame_id': None, 'seq': 4711}}
Re: PyYaml Problem beim Laden
Verfasst: Donnerstag 11. Februar 2016, 13:49
von locutus
@BlackJack:
vielen Dank, ja, auf die Sache mit dem "---" war ich auch schon gestoßen, dachte aber, wenn ich die Daten so bekomme, müssen die schon richtig sein

Ich arbeite jetzt so weiter, als ob es so wäre und warte auf die nächsten Daten^^
Re: PyYaml Problem beim Laden
Verfasst: Dienstag 23. Februar 2016, 14:49
von locutus
Da meine nächste Frage sehr ähnlich zur ursprünglichen war, versuche ich es mal weiter in diesem Thread, in der Hoffnung, dass er nicht übersehen wird
Wenn man mehrere Yaml-Dokumente in einer Datei hat, getrennt durch "---", kann man dann yaml.load verwenden, um gezielt ein bestimmtes Dokument aus der Datei zu laden, z.B. das zweite? Oder läd yam.load bei jedem neuen Aufruf das nächste Dokument ein, sodass man darüber eines gezielt erreichen könnte? Ich würde ungern yaml.load_all verwenden, um dann dasjenige auszuwählen, das wäre bei der Datei ein ziemlicher Overhead.
Vielen Dank schon einmal!
Re: PyYaml Problem beim Laden
Verfasst: Dienstag 23. Februar 2016, 15:32
von BlackJack
@locutus: `yaml.load()` kommt nur mit einem Dokument in der Datei zurecht und löst andernfalls eine Ausnahme aus. `load_all()` lädt ja nicht alles auf einmal, sondern gibt einen Iterator über die Dokumente zurück, der die Dokumente „lazy“ lädt.
Re: PyYaml Problem beim Laden
Verfasst: Dienstag 23. Februar 2016, 16:17
von locutus
@BlackJack: Ah, ok, danke. Wenn man jetzt das z.B. erste von den Dokumenten nur haben möchte, kann man das irgendwie netter machen, als eine for-Schleife dann abzubrechen?
Re: PyYaml Problem beim Laden
Verfasst: Dienstag 23. Februar 2016, 16:30
von BlackJack
@locutus: Mit der `next()`-Funktion.
Re: PyYaml Problem beim Laden
Verfasst: Dienstag 23. Februar 2016, 18:13
von locutus
@ BlackJack: Ah, ok, vielen Dank!
Re: PyYaml Problem beim Laden
Verfasst: Dienstag 23. Februar 2016, 18:14
von cofi
locutus hat geschrieben:Da meine nächste Frage sehr ähnlich zur ursprünglichen war, versuche ich es mal weiter in diesem Thread, in der Hoffnung, dass er nicht übersehen wird

Bitte erstell einen neuen Thread. Wenn du nicht an dasselbe Thema anknuepfen willst, dann ist deine Frage besser nicht hier aufgehoben. Posts hier koennen Benachrichtigungen an die vorherigen Poster ausloesen und wenn es ihnen nicht helfen kann, sollte man das vermeiden
Edit: Ok, ich sehe gerade dass es dein Thread war. Trotzdem gilt, dass ein neuer Thread Leuten mit demselben Problem besser helfen kann, weil er einfacher gefunden wird
