Exceltabellen in Python

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
VitroN
User
Beiträge: 16
Registriert: Samstag 12. Januar 2008, 09:58

Mittwoch 20. Februar 2008, 15:12

Hallo,
da mein Informatik-Lehrer meinte, dass es recht einfach wäre in Python eine Exceltabelle zu erzeugen bzw. einzulesen, ich jedoch schon einmal hier im Forum deswegen gefragt habe und da etwas anderes gehört hab, will ich nochmal ganz kontret hier fragen...
Also, folgender Sachverhalt: Ich möchte mit Hilfe der Funktion

Code: Alles auswählen

f = file('Dateinname.xls', 'r')
eine Exceldatei mit einer Namensliste (Name, Nachname nebeneinander in den Zellen A1, B1, A2, B2 usw.) einlesen und anschliessend, nach ein paar Veränderungen, auch wieder speichern.

So, jetzt meine Frage:
Ist dies problemlos bzw. mit wenig Aufwand möglich oder empfiehlt es sich ehr eine Textdatei (.txt) zu verwenden?

Vielen Dank für eure Antworten
VitroN
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 20. Februar 2008, 15:27

VitroN hat geschrieben:So, jetzt meine Frage:
Ist dies problemlos bzw. mit wenig Aufwand möglich oder empfiehlt es sich ehr eine Textdatei (.txt) zu verwenden?
Letzteres oder eine CSV-Datei verwenden. Die Excel-Tabellen würde ich nicht parsen, denn die ist 349 Seiten land und das würde ich nicht implementieren wollen. Joel zeigt praktikablere Ansätze.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 20. Februar 2008, 15:54

Hallo VitroN!
VitroN hat geschrieben:da mein Informatik-Lehrer meinte, dass es recht einfach wäre in Python eine Exceltabelle zu erzeugen bzw. einzulesen
Es ist einfach, wenn man Windows und ein installiertes Excel zur Verfügung hat. Suche hier im Forum nach "Excel" und du wirst mehrere Möglichkeiten finden. Lies einfach alles durch was du mit diesem Stichwort findest. Dann weißt du Bescheid.
VitroN hat geschrieben:Ich möchte mit Hilfe der Funktion

Code: Alles auswählen

f = file('Dateinname.xls', 'r')
eine Exceldatei mit einer Namensliste (Name, Nachname nebeneinander in den Zellen A1, B1, A2, B2 usw.) einlesen und anschliessend, nach ein paar Veränderungen, auch wieder speichern.
Nein, das wird nichts. Du kannst eine Excel-BINÄRDATEI nicht wie eine Textdatei behandeln. Entweder du verwendest COM um über Excel auf die Datei zuzugreifen oder du verwendest ODBC um über Excel auf die Datei zuzugreifen.

Wenn es dir nur um einen einfachen Datenexport und Datenimport geht, dann speichere die Excel-Datei als CSV-Datei ab und verwende in Python das csv-Modul.

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

Mittwoch 20. Februar 2008, 15:57

Nur um das nochmal klarzustellen: Mit "open" kann man nicht "mal eben so" eine Excel-Datei lesen. Den dafür benötigten Parser bringt Python nicht mit, und afaik gibt es auch kein Python-Modul dafür!

Der einzige, praktikable Weg ist COM, was aber nur unter Windows funktioniert.

Die Aussage deines Informatiklehrers ist also nicht wirklich gerechtfertigt. Unter Linux ist es nicht leicht, Excel-Dateien zu lesen!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 20. Februar 2008, 17:06

da mein Informatik-Lehrer meinte, dass es recht einfach wäre in Python eine Exceltabelle zu erzeugen bzw. einzulesen
"Recht einfach" ist natürlich eine sehr dehnbare Formulierung. Und auch, was er mit "Exceltabelle" meint, könnte mehrdeutig sein - leider wird ja "Excel" häufig synonym zu "Tabellenkalkulation" verwendet, so dass "Exceltabelle" möglicherweise nicht mehr als "Rechenblatt" bedeuten soll und er gar nicht unbedingt an eine Datei im xls-Format gedacht hat. Liegt die Tabelle im csv-Format vor, dann ist es wahrhaftig nicht so schwierig.

Falls der Lehrer doch an eine echte xls-Datei gedacht hat, dann würde ich ihn an deiner Stelle mal fragen, wie ER das denn "recht einfach" machen würde. So wie ich dich verstanden habe, ist die Lösung dieses Problems ja keine Hausaufgabe, so dass Hilfe vom Lehrer denkbar wäre (zumal wenn er so eine Äußerung tätigt).
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Mittwoch 20. Februar 2008, 17:45

Leonidas hat geschrieben:Joel zeigt praktikablere Ansätze.
Joel Spolsky hat geschrieben:All of these subtle bits of behavior cannot be fully documented without writing a document that has the same amount of information as the Excel source code.
...Von welchem Softwaregiganten kenne ich diese Argumentation nur.... :roll:
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
BlackJack

Mittwoch 20. Februar 2008, 18:30

@lunar: Hast Du Erfahrung mit xlrd oder warum ist COM der einzig praktikable Weg?
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 20. Februar 2008, 18:39

Da wir schon mal dabei sind... Wie sieht es mit OpenOffice aus? Die Excel Dateien in OO laden und dann irgendwie in Python laden, aber wie?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Mittwoch 20. Februar 2008, 18:49

jens hat geschrieben:Da wir schon mal dabei sind... Wie sieht es mit OpenOffice aus? Die Excel Dateien in OO laden und dann irgendwie in Python laden, aber wie?
Python + OpenOffice = Gelber Schnee.

Immernoch umständlich, immernoch schwierig.
lunar

Mittwoch 20. Februar 2008, 19:18

BlackJack hat geschrieben:@lunar: Hast Du Erfahrung mit xlrd oder warum ist COM der einzig praktikable Weg?
Nein, ich kannte die Bibliothek einfach nur nicht. Als Linuxer und überzeugter Anhänger freier Software hat man halt nicht viel mit Excel zu tun ;)
jens hat geschrieben:Da wir schon mal dabei sind... Wie sieht es mit OpenOffice aus? Die Excel Dateien in OO laden und dann irgendwie in Python laden, aber wie?
OpenOffice kann Excel laden, und es gibt UNO-Bindings für Python. Theoretisch steht dem also nichts im Weg, praktisch begegnet man sehr schnell der UNO-API, gegen die COM wie der siebte Himmel aussieht.

Die UNO-API stützt sich auf die selben Design-Prinzipien wie CORBA. So verwendet UNO ebenfalls IDL als Definitionsprache für Schnittstellen. In der API schlägt sich das schon so nieder, dass jede konkrete Klasse eine gleichwertige abstrakte Schnittstelle hat, auch wenn es nur eine einzige konkrete Implementation dieser Schnittstelle gibt. Außerdem entwickelt UNO komplizierteste Vererbungshierarchien. Dadurch ist die API extrem kompliziert, weitaus mehr, als der Notwendigkeit angemessen wäre. In Verbindung mit einer für Python-Entwickler ziemlich schlechten Dokumentation ist das tödlich. Diese Dokumentation ist eine genaue Repräsentation des UNO-Objektbaums, inklusive aller Schnittstellen. Diese API lässt sich aber natürlich prinzipbedingt nicht vollständig auf Python übertragen, so dass man vor der undankbaren Aufgabe steht, sich aus geschätzten 1000 Klassen die 100 rauszusuchen, mit denen man tatsächlich zu tun haben könnte.

Das es besser geht, zeigt kross, die neue Skripting-Engine von KOffice. KSpread mit Python anzusteuern, ist vom Standpunkt der API betrachtet ein reines Vergnügen. Allerdings war kross vor einem halben Jahr, als ich es getestet habe, reichlich unausgereift, was sich desöfteren in gewissen Merkwürdigkeiten gezeigt hat. Außerdem sind die Excel-Konverter von KOffice bei weitem nicht so gut wie die von OpenOffice.
Zuletzt geändert von lunar am Mittwoch 20. Februar 2008, 19:29, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 20. Februar 2008, 19:23

Wobei man bei OO.org relativ schnell auf einzelnen Zellen zugreifen kann. Ist ja nur gezipptes xml und wirklich leicht zu durchschauen. Natürlich kommt es auf die Komplexität des Problems an.

Für KOffice gibt es ein schönes Python-Modul. Aber generell ist der Weg über CSV-Files ist wohl doch der praktikabelste ...
VitroN
User
Beiträge: 16
Registriert: Samstag 12. Januar 2008, 09:58

Donnerstag 21. Februar 2008, 06:46

Auch wenn ich die letzten paar Beiträge nicht verstehe, weil ich mich mit der Materie so tiefgehend nie beschäftig hab, sag ich mal VIELEN DANK. Ich werd meinen Infolehrer einfach mal fragen, wie er sich das vorstellt...wollte nur halt vorher bisschen besser Bescheid wissen und nicht vollkommen blöd dastehen ;-)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 21. Februar 2008, 11:58

@BlackJack: xlrd kann aber so wie ich das sehe nur lesen und der OP hatte, so wie ich das lese, auch vor darin zu schreiben. Dann ist xlrd + COM weniger sinnvoll, weil man dann auch COM nehmen kann. Insgesamt ist COM im Vergleich zu dem was OpenOffice.org bietet eigentlich recht angenehm zu benutzen. Kross kannte ich nicht, aber wesentlich grausamer als OOo ist ja sowieso kaum möglich ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 21. Februar 2008, 12:01

Also ich für meinen Fall, werde dann doch lieber den CSV Export aus OO machen und damit weiterarbeiten. Ist eh nur für eine einmalige Export-/Import Geschichte gedacht ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten