xml-Tabelle mit Python erstellen

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
hotzenplotz
User
Beiträge: 7
Registriert: Freitag 27. Mai 2011, 20:43

Hallo,

ich suche eine Möglichkeit mit Python eine einfache Tabelle zu erstellen (Format = xml), die dann mit Excel geöffnet werden kann und dabei noch "sauber" aussieht (keine Zeilen, Spalten verrutscht etc.. )

Zur Zeit habe ich einen String, erweitere diesen Zeile für Zeile manuell und speichere ihn dann als .xml ab. Das funktioniert auch einigermaßen...
Leider ist das 1. sehr aufwendig und 2. sieht die Tabelle in Excel nicht gerade ordentlich aus.

Hätte da jemand einen Rat für mich?
deets

Das sind zwei getrennte Probleme.

Erstens: wie muss das XML aussehen? Ich habe kein Excel, insofern kann ich das nicht nachpruefen. Wie sieht denn das XML aus?

Zweitens: wie generiert man XML. Da helfen Bibliotheken wie lxml, oder Template-Engines wie zB Genshi.
hotzenplotz
User
Beiträge: 7
Registriert: Freitag 27. Mai 2011, 20:43

Stimmt. Das Excel-Problem können wir erst einmal hinten anstellen.

Ich erstelle das XML-File so:

file = open("c:/test.xml", "w")
x = "<root> "
x = x + "\n\t<daten> etc.. </daten>"
x = x + "\n\t</root>" ....
file.write(x)
file.close()

Wie gesagt, sehr umständlich :(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

hotzenplotz hat geschrieben: Wie gesagt, sehr umständlich :(
Dir wurde ja die Lösung dafür schon genannt ;-)

Dateien solltest Du übrigens so öffnen:

Code: Alles auswählen

with open(...) as handler:
    # handler ist hier file-object
Damit werden sie auf jeden Fall geschlossen und man spart sich die Exceptionbehandlung.

Strings sollte man tunlichst nicht mit "+" zusammenbauen, sondern sich die Teilkomponenten idealerweise in einem Iterable merken und dann per `"".join()` zusammenbauen:

Code: Alles auswählen

foo = ["Hallo", "Welt"]
"".join(foo)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
hotzenplotz
User
Beiträge: 7
Registriert: Freitag 27. Mai 2011, 20:43

Danke für die Tipps!

Dann werde ich mal über lxml und Genshi informieren.
hotzenplotz
User
Beiträge: 7
Registriert: Freitag 27. Mai 2011, 20:43

Das hat alles super funktioniert! Danke nochmals.

Ich habe aber noch eine Frage:

Wenn ich das XML-File abspeichern möchte, benutze ich den Befehl:
tree = etree.ElementTree(root)
tree.write("IchbineineXMLDatei.xml")

Wie kann ich den Pfad angeben, wo die Datei gespeichert werden soll?
So wird sie immer im Python-Verzeichnis erstellt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

hotzenplotz hat geschrieben:tree.write("IchbineineXMLDatei.xml")

Wie kann ich den Pfad angeben, wo die Datei gespeichert werden soll?

Code: Alles auswählen

tree.write("/ich/bin/der/pfad/IchbineineXMLDatei.xml")
hotzenplotz
User
Beiträge: 7
Registriert: Freitag 27. Mai 2011, 20:43

Da hätte ich auch selber drauf kommen können :P
Danke!
problembär

Bzgl. des Verzeichisses ist oft auch "os.path.join()" ganz brauchbar.

Gut, wenn Du so zurechtkommst. Ich persönlich würde vielleicht Excel über win32com direkt ansprechen, und dort die Daten eintragen. Finde ich meistens eleganter als eine externe Datei zu öffnen.
Es sei denn, Du brauchst die xml-Datei noch für andere Zwecke (obwohl Excel die wohl auch speichern könnte).

Gruß
Antworten