Hallo,
hat jemand vielleicht eine Idee, wie ich die play-counts aus einer alten rhythmdb.xml zu einer neuen rhythmdb.xml dazuaddieren kann.
Vielleicht gibt es ja eine Möglichkeit mit XmlStarlet, bin aber noch nicht fündig geworden.
Bye Marcus
Anmeldungsdatum: Beiträge: 186 |
Hallo, hat jemand vielleicht eine Idee, wie ich die play-counts aus einer alten rhythmdb.xml zu einer neuen rhythmdb.xml dazuaddieren kann. Vielleicht gibt es ja eine Möglichkeit mit XmlStarlet, bin aber noch nicht fündig geworden. Bye Marcus |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Mit LG, track |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12822 |
Ich würde, wie immer für so etwas, Ruby mit Nokogiri nehmen. Aber das ist nur meine Meinung. 😉 |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Na ja, ob nun Ruby/Nokogiri oder xmlstarlet, das sind ja nun handwerkliche Vorlieben ... Erstmal müssen wir ja mal klären, was da überhaupt zusammen-editiert werden soll. Ich hab doch keine Ahnung, was da nun genau zusammengeführt werden soll. Weder habe ich mal mit Rhythmbox was gemacht, noch habe ich mir so eine rhythmdb.xml angeguckt. Also mal gucken, was uns Marcus da vorlegen kann. Dann gucken wir mal, mit den Werkzeugkästen. track |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 186 |
Hallo, die rhythmdb.xml sieht folgendermaßen aus:
Bye Marcus |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12822 |
Das mit xmlstarlet zu machen wird ein größerer Stunt.
Er hat doch klar gesagt, dass er Werte in mehreren XML-Dokumenten aufsummieren und wieder in ein ähnliches Dokument schreiben will.
Korrekt, dass in einer Datei mehrere Sektionen <entry> stehen oder ist das immer nur eine pro Datei? |
||||
Anmeldungsdatum: Beiträge: 11179 Wohnort: München |
Mal als erster Versuch: dieses Python3-Skript (benötigt das Paket python3-lxml) hier sieht den Text im <location> Tag eines Eintrags als eindeutiges Element an (das müsste man auch leicht normalisieren können, wenn das bei den einzelnen Dateien abweicht), anhand dessen es den play-count aller aus den übergebenen Dateien zusammenkopierten Einträge, bei denen das Merkmal übereinstimmt, zusammenzählt und danach die Duplikate entfernt (dementsprechend gelten für die übrigen Tags die Daten aus der ersten Datei, aus der so ein Element eingelesen wurde). Das Ergebnis kann optional in eine Datei geschrieben werden, sonst landet es auf stdout.
$ python merge_rhythmdb_playcount.py -h usage: merge_rhythmdb_playcount.py [-h] [--output OUTPUT] FILE [FILE ...] merge play-count of multiple rhythmbox databases by file location positional arguments: FILE rhythmbox databases to parse optional arguments: -h, --help show this help message and exit --output OUTPUT, -o OUTPUT file to write the result to |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Ja, das wäre auch meine Frage: steht bei Dir immer nur 1 Titel in der rhythmdb.xml - Datei ? Überhaupt: ist das die komplette rhythmdb.xml ?? - es fehlt nämlich der schließende Tag Wenn es immer nur 1 Titel gäbe, wäre das nämlich recht einfach: Du ziehst aus der alten rhythmdb.xml die Count-Zahl heraus und editierst die Summe in die neue rhythmdb.xml hinein: track@track:~$ xmlstarlet sel -t -m //entry -v play-count rhythmdb1.xml 2 track@track:~$ count1=$( xmlstarlet sel -t -m //entry -v play-count rhythmdb1.xml ) track@track:~$ xmlstarlet sel -t -m //entry -v play-count rhythmdb2.xml 1 track@track:~$ count2=$( xmlstarlet sel -t -m //entry -v play-count rhythmdb2.xml ) track@track:~$ (( count2 += count1 )) track@track:~$ xmlstarlet ed -u //entry/play-count -v $count2 rhythmdb2.xml > rhythmdb2neu.xml track@track:~$ xmlstarlet sel -t -m //entry -v play-count rhythmdb2neu.xml 3 Wenn da jetzt allerdings eine ganze Liste an Titeln steht, dann muss man darüber iterieren, damit man die richtigen Zahlen zuordnet. Edit: LG, track |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 186 |
Hallo, der Hintergrund dieser Aufgabe findet sich auch in nachfolgendem Link: https://forum.ubuntuusers.de/topic/rhythmbox-stuerzt-ab-nach-update-auf-ubuntu-16/ Die alte rhythmbox.xml Datenbank funktioniert nach Update auf Ubuntu 16.04 nicht mehr. Ich habe eine neue vom Programm erstellen lassen. Darin fehlen aber u.a die play-count´s. In der neuen rhythmdb.xml zählt Rhythmbox jetzt die play-counts von 0 an wieder hoch, wobei erst ein
Eintrag erstellt wird, wenn der Song das erste mal gespielt worden ist. Ich möchte gerne, dass die play-counts aus der alten rhythmdb.xml in der neunen rhythmdb.sml dazuaddiert werden.
Korrekt, es gibt pro Song je eine Sektion
seahawk1986 Danke für die schnelle Antwort. Ich muß gleich weg und hoffe das ich am Wochenende deinen Vorschlag mal testen kann. Bye Marcus |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Ah, ok, jetzt verstehe ich das Problem. Allerdings würde ich dazu neigen, die alte rhythmdb.xml mit Das erscheint mir weniger Aufwand, und vor allem sicherer, als jetzt 2 verschiedene XMLs mit womöglich unterschiedlicher Indizierung sauber zusammen zu führen. Dafür müsste man sich zuerst mal genau angucken, was an der alten XML jetzt so "giftig" ist. Allerdings bin ich jetzt gleich weg, bis morgen Abend. Vielleicht habe Ihr ja bis dahin schon andere funktionierende Lösungen. LG, track |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 186 |
Hallo track ich konnte keinen Fehler in der alten rhythmdb.xml feststellen. Die Datenbank beinhaltet 33000 Songs. Irgendwo im Netz hatte ich mal gelesen, dass wohl zu viele Metadaten den Absturz von Rhythmbox verursachen. Deshalb habe ich mir gedacht, nur die für mich wichtigen Metadaten (play-count) in die neue rhythmdb.xml zu kopieren.
Ja, das ist richtig. Ganz am Ende befindet sich der schließende Tag </rhythmdb> !
Aus Eindeutiges Kriterium sollte doch die <location> ausreichen:
Bye Marcus |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
So, da bin ich wieder. In der Geschichte würde ich mich nur ungern auf Gerüchte verlassen, da muss schon was konkreteres her ... Mach doch mal folgendes:
Versuchen wir es doch mal in der Richtung. track |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 186 |
Hallo track,
Habe ich getan mit nachfolgenden Ergebnis:
Bye Marcus |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 186 |
Hallo track,
ich habe mal die Tags in der alten mit der neuen rhythmdb.xml verglichen. Es scheint keine Unterschiede der Tags zu geben. Bye Marcus |
||||
Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Ich glaube, dann habe ich da etwas Grundsätzliches nicht verstanden. Deshalb war ich davon ausgegangen, dass Du der neuen Rhythmbox einfach die alte Datei unterschieben könntest. Wenn dem nicht so ist, dann müsstest Du mir mal erklären, wie und wo diese Datei von der Rhythmbox eingelesen und verarbeitet wird.
Ok, dann scheint es also keine "falsche Art Tags" zu geben, sondern das Problem liegt woanders. Zieh doch bitte mal genau diesen Datensatz heraus, mit xmlstarlet sel -t -m //entry[3275] -c . rhythmdb.xml und guck ihn Dir an. Ist daran irgendetwas anders als an anderen Datensätzen ? track |