Datei in XML-Format umwandeln

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

zappa hat geschrieben:Und um den Mut nicht ganz zu verlieren würde mich interessieren, wie lange Leute wie BlackJack (und auch die anderen, die z.T. über 3000 Einträge haben) schon mit Python beschäftigt sind. Hab Ihr beruflich damit zu tun? oder ist das nur Hobby?
Ich beschäftige mich seit IMHO gut 4 Jahren mit Python, komme aber im Beruf eher selten dazu, es einzusetzen.

Grundsätzlich habe ich über 25 Jahre Erfahrung mit Programmierung und über 20 Jahre mit echter Softwareentwicklung. Ich lese diverse Fachbücher und Magazine und bemühe mich dadurch nicht nur einigermaßen auf dem Laufenden zu bleiben, sondern auch neue Dinge zu lernen.
Jackaroo
User
Beiträge: 13
Registriert: Mittwoch 1. Dezember 2010, 13:28

Nach langer, langer Zeit habe ich nun BlackJacks Empfehlungsliste abgearbeitet. Das Ergebnis kann angesehen werden unter
http://www.python-forum.de/pastebin.php?mode=view&s=226 . Vielleicht hat ja wieder jemand Lust, nochmal einen Blick auf die überarbeitete Version zu werfen. Das Programm macht immer noch das Gleiche und funktioniert auch nach der Überarbeitung noch.

@Black Jack: Deine Tips waren wirklich super. Vielen Dank nochmal. (Leider ist noch ein "continue" übrig geblieben.)

Natürlich haben sich beim Abarbeiten von BlackJacks Liste wieder neue Fragen gestellt:
  • - Habe ich das mit dem rekursiven Aufruf von write_asset() so richtig verstanden?
    - Was ist der Vorteil des rekursiven Aufrufs gegenüber einer Schleife? (Bin noch am Grübeln.)
    - Ist es nun besser Klassenvariablen zu verwenden oder lokale Variablen, die weitergereicht und zurückgegeben werden? (Hängt wahrscheinlich davon ab, ob ...)
J.
BlackJack

@Jackaroo: Hm, das ist ja schon ziemlich lange her. Ich muss wohl gedacht haben es werden verschachtelte XML-Strukturen aus Pfadangaben erstellt. Das hätte ich rekursiv gemacht. Aber so bringt das bei `write_asset()` keinen Vorteil. Im Gegenteil.

*Klassen*attribute sollte man nur sehr sparsam einsetzen. Was Du meinst sind Attribute auf den Exemplaren (a.k.a. „Instanzattribute”). Da hängt es davon ab, ob der Wert den man daran bindet zum Zustand des Objekts gehört, oder nur lokal in einer Methode benötigt wird. Ich denke Du bindest ein bisschen viel an das Objekt. Zum Beispiel müsste die XML-Datei nicht die ganze Zeit offen sein. Es würde genügen, wenn man die ganz zum Schluss nur lokal in einer Methode öffnet, beschreibt, und wieder schliesst.

Ansonsten sieht mir das alles ein wenig kompliziert aus. Keine Ahnung ob das so sein muss. Die Werte aus der CSV-Datei scheinen ja selber noch einmal eine recht aufwendige Struktur zu besitzen.
Jackaroo
User
Beiträge: 13
Registriert: Mittwoch 1. Dezember 2010, 13:28

@BlackJack:

Doch, doch, es werden verschachtelte XML-Strukturen aus Pfadangaben (tag/tag/tag/tag) erstellt. Sieht man das nicht? ( :oops: ) Aktuell ist der erzeugte XML-Baum maximal 4 Ebenen tief. Also nur ein bisschen verschachtelt.

Ich finde, der rekursive Aufruf von write_asset() ist schwerer zu verstehen als eine Schleife, allerdings kommt man ohne eine Einrückungsebene aus. Dann sieht es etwas einfacher aus.

Das mit dem Offenhalten der XML-Datei habe ich sofort geändert. Ist ja einleuchtend.

Für die Instanzattribute habe ich mir mal folgende Erklärung zurechtgelegt: Wenn ein Attribut nur von zwei Methoden benötigt wird, dann kann ich es auch als Parameter hin- und herreichen. Darüberhinaus wird es unübersichtlich und ein Instanzattribut ist einfacher in der Handhabung. Ist das eine vertretbare Sichtweise?

Kopfzerbrechen bereitet mir, dass es immer noch so kompliziert aussieht. Ich habe nun nochmal eine Version gemacht, die ohne den "look ahead" auskommt und nochmals 10% kürzer ist. Aber ob es nun weniger kompliziert ist, weiss ich nicht.
BlackJack

@Jackaroo: Ich sehe nicht wie aus einem Pfad eine verschachtelte Struktur gemacht wird, wie ich das wohl ursprünglich dachte. Ich dachte da wäre eine rekusrive Struktur, womit ein rekursiver Aufruf auch Sinn gemacht hätte. Dass das nicht total flach ist, war mir schon klar.

Das mit den Instanzattributen würde ich nicht nur an der Anzahl von Methoden fest machen, die einen Wert benötigen, sondern auch ob es semantisch für ein Objekt von einem bestimmten Typ Sinn macht, dass ein Attribut dauerhaft zu seinem Zustand gehört.

Das mit der Komplexität kannst Du nur selber einschätzen, es sei denn jemand macht sich die Mühe den bisher gezeigten Quelltext zu „reverse egineer”en, um heraus zu finden was der eigentlich genau machen soll. :-)
Jackaroo
User
Beiträge: 13
Registriert: Mittwoch 1. Dezember 2010, 13:28

Das mit dem Reverse-Engineering - soweit würde ich nicht gehen wollen. Das ist ja für Dritte eher langweilig und mühsam.

Immerhin habe ich mittlerweile 5 verschiedene Versionen von dem Skript erzeugt, von denen jede exakt das gleiche macht, aber alle sehen anders aus. Die letzte Version ist um ein Drittel kürzer als die erste. Dabei ist auch der eine oder andere Blödsinn verschwunden. Das war ja eine ganz gute Übung.

Ich fürchte, ich bin zu unbedarft in XML, um zu verstehen, inwiefern ein XML-Baum anders verschachtelt sein kann, als in Form von mehr oder weniger vielen Ebenen oder Zweigen!?

Danke nochmals für die Hinweise!
BlackJack

@Jackaroo: Die Frage ist *was* da verschachtelt ist. Wenn da eine rekursive Struktur vorhanden ist, dann würden auch rekursive Funktionen sinnvoll in Frage kommen. Wenn die Datenstruktur nicht rekursiv ist, dann verwirren rekursive Aufrufe nur, die man auch ganz einfach mit einer Schleife ausdrücken kann.
Antworten