Yaml

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Das ewige elend...Yaml
Ich denke diese Frage ist hauptsächlich an Gerold gerichtet, aber ich bin für jede Art von Hilfe dankbar.

Ob mans glaubt oder nicht ich schreib noch immer an meinem Vokabelprogramm, bin halt nicht der schnellste :roll:

Es funktioniert jetzt immerhin schon so, so dass man Vokabeln eingeben kann und diese dann wieder abgefragt werden. Es gibt mehrere Stages, die das Vokabel hinaufwandern muss. Es kann mehrere Lösungen geben...

Aber ich stehe nun vor einem Problem - das Speichern:
nehmen wir mal an ich habe eine bereits gespeicherte Yaml Datei und will zu dieser noch Vokabeln hinzufügen:

a, das Vokabel ist in eine neuen Sprache, die es in dieser Datei noch nicht gibt. Eigentlich muss man da nur die Datei mit dem Befehl "aÜ" öffnen und er hängt es am Schluß an...Nur dass er dabei die drei Querstriche "---" mitschreibt und yaml alles was vor den Strichen kommt nicht mehr mit einliest.

b, das Vokabel ist in der gleichen Sprache.

Gibt es einen anderen Weg a zu lösen, als die ganze Datei einzulesen, zu modifizieren und dann nicht mit dem Befehl "aÜ" schreiben sondern die ganze Datei nochmal mit "w" schreiben. Bei b, kommt man wohl nicht drumherum, aber gibt es keinen Befehl yaml ohne die --- schreiben zu lassen?

EDIT: Hat sich eigentlich erledigt. Ich lös das ganze halt mit einlesen, modifizieren, schreiben.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

marco_ hat geschrieben: gibt es keinen Befehl yaml ohne die --- schreiben zu lassen?
Hi marco_!

Ausschnitt aus meinem Beispiel:

Code: Alles auswählen

# yaml-datei erzeugen
f = file(r"C:\yamltest.yml", "w")
dumper = yaml.Dumper()
dumper.indent = "   "
y = dumper.dump(datalist)
f.write(y)
f.close() 
dumper.dump(datalist) liefert dir einen String, der erst später in die Datei geschrieben wird.
Du musst nur diesen String, bevor du ihn in die Datei schreibst, so umändern, dass dieser zur vorhandenen Struktur passt. Evt. brauchst du nur zwei Bindestriche entfernen.
Sieh dir y an, analysiere die Struktur und passe diese an das gewünschte Ergebnis an. Danach hängst du den neuen String an das vorhandene File an.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Danke!!
Aber nun stellt sich mir eine andere Frage, ich muss leider herausfinden ob es diese Sprache schon gibt um sie am Ende anhängen zu können. Bis jetzt mach ich das leider nicht gerade Ressourcen sparend. Ich lese nehmlich die ganze Datei ein und ermittle dann mit .has_key() ob es die Sprache schon gibt. Da ich aber nicht mehr wissen will und trotzdem alle Wörter geladen werden ist das ziemlich dumm. Ich kann natürlich alle Sprache extra noch in eine kleine Text-Datei schreiben um das zu erfahren, ist aber nicht gerade guter Style und ich will nicht unbedingt neue Tetdateien erstellen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

marco_ hat geschrieben: ich muss leider herausfinden ob es diese Sprache schon gibt um sie am Ende anhängen zu können. Bis jetzt mach ich das leider nicht gerade Ressourcen sparend. Ich lese nehmlich die ganze Datei ein und ermittle dann mit .has_key() ob es die Sprache schon gibt.
Hi marco_!

Auf diese Frage gibt es eindeutig zu viele Antworten. Das fängt an mit "Schreibe alles in eine Datenbank", geht über "Halte dir die Daten im Speicher" und endet wahrscheinlich bei "Mach doch für jede Sprache eine Datei".

Hier, mein Vorschlag: Schreibe für jede YAML-Datei mit Vokabeln eine zusätzliche kleine YAML-Datei mit den Sprachen und sonstigen evt. anfallenden Einstellungen.

beim_mittagessen.yml
beim_mittagessen.set
am_bahnhof.yml
am_bahnhof.set

Das ist einfach zu handhaben, du kannst immer noch die Daten an die Vokabel-Datei anhängen und musst nur die Einstellungen (z.B. verwendete Sprachen) in eine andere Datei schreiben. Ich würde in die zusätzliche Datei auch das Änderungsdatum der Vokabeldatei schreiben und dieses nach jeder Änderung aktualisieren. Existiert die Datei mit den Einstellungen noch nicht oder stimmen die Änderungsdaten nicht überein, dann musst du die Vokabeldatei nach den verfügbaren Sprachen scannen und in die Einstellungsdatei eintragen. Stimmen die Änderungsdaten überein, brauchst du die Vokabeldatei nicht scannen. Unterschätze nicht die Geschwindigkeit beim Lesen und Schreiben von *kleinen* Textdateien, da die oft noch im Lese-Schreib-Cache gehalten werden. Langsam wird es erst, wenn du *viele* kleine Dateien oder *wirklich* *große* Dateien in einem Rutsch lesen/schreiben musst.

Wie bereits oben geschrieben --> viele Wege führen nach Rom. Mal schau'n was die anderen dazu schreiben.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten