Excel Tabelle in Klasse importieren

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
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

Hallo ihr Lieben ;)

Ich bin etwas verzweifelt.
Ich programmiere jetzt seit 2 Tagen mit Python und komme gerade nicht weiter :(

Ich habe bereits einige Tutorials gelesen und das Python Handbuch ebenfalls, aber wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht :(

Ich möchte aus einer Excel Tabelle in eine Klasse importieren, sodass ich die Werte der Excel-Tabelle später noch zur verfügung habe.
Dabei soll jeder Datensatz eine neue Instanz dieser einen Klasse bilden ... leider habe ich mit Klassen garkeine Erfahrung, was es mir auch gerdae sooo schwer macht :(

Vielleicht kann mich ja jemand auf den richtigen Weg führen.

Liebe Grüße

Sroken
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Gibt es einen Grund, warum es Excel-Tabellen sein müssen oder kannst du dir das Format selber aussuchen? Dann könntest du die Daten auch als csv-Datei speichern und mittels des bei Python mitgeliefertem csv-Modul laden.

Um was für Daten handelt es sich bei dir und warum sollen diese in eine Klasse gepackt werden?

Sebastian
Das Leben ist wie ein Tennisball.
Liffi
User
Beiträge: 153
Registriert: Montag 1. Januar 2007, 17:23

Um dein Wissen um Klassen zu erweitern kann ich dir nur das deutsche Python Tutorial ans Herz legen.
Um Excel Tabellen zu Parsen kannst du xlrd benutzen.
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

EyDu hat geschrieben:Hallo.

Gibt es einen Grund, warum es Excel-Tabellen sein müssen oder kannst du dir das Format selber aussuchen? Dann könntest du die Daten auch als csv-Datei speichern und mittels des bei Python mitgeliefertem csv-Modul laden.

Um was für Daten handelt es sich bei dir und warum sollen diese in eine Klasse gepackt werden?

Sebastian
Hallo Sebastian,
danke erstmal für die Hilfe ;)

Das Format ist eigentlich auch csv ... sitz nur seit 5 stunden dran und bin bissl wirr :D

der Import ansich funktioniert

Code: Alles auswählen

def readin():
                   import csv
                   csv.list_dialects()
                   file = '*.csv'
                   reader = csv.reader(open(file))
                   print ('')
                   print ('Feld 1; Feld 2; Feld 3; Feld 4 ')
                   print('')
                   for row in reader:
                       print('; '.join(row))
das ganze soll passieren nach dem die "1" gedrückt wurde. Bei diesem Code ist es aber so, dass er das ja direkt raushaut.
das soll aber erst passieren, nachdem die "2" gedrückt wurde und natürlich vorher mit der "1" eingelesen wurde.

Um dein Wissen um Klassen zu erweitern kann ich dir nur das deutsche Python Tutorial ans Herz legen.
Um Excel Tabellen zu Parsen kannst du xlrd benutzen.
Hallo Liffi, auch dir erstmal herzlichen Dank.
wenn du wüsstest wiiiiiieeee viiiielll ich darins chon gelesen habe, aber steh immernoch auffem schlauch :D

ich vermute xlrd hat sich erledigt, da es sich ja wie oben bereits geschrieben um eine CSV handelt... sorry mein Fehler :(
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

So bin jetzt mal bissl weiter gekommen.

Durch den befehl csv.DictReader(*blub) - importiere ich ja eine csv quasi in eine Klasse... wenn ich das richtig verstehe:
Create an object which operates like a regular reader but maps the information read into a dict whose keys are given by the optional fieldnames parameter. If the fieldnames parameter is omitted, the values in the first row of the csvfile will be used as the fieldnames. If the row read has more fields than the fieldnames sequence, the remaining data is added as a sequence keyed by the value of restkey. If the row read has fewer fields than the fieldnames sequence, the remaining keys take the value of the optional restval parameter. Any other optional or keyword arguments are passed to the underlying reader instance.
Hoffe ich versteh das nicht falsch ... Was ich aber noch nicht ganz verstehe ... wie greife ich später darauf zurück?
dictreader.fieldname funktioniert hier nicht ... mach ich was falsch, oder hab ich nen riesen Denkfehler?

Vielen Dank schonmal :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also ein DictReader liefert Dir nur eine Liste von Dictionaries, statt einer Liste von Tupeln / Listen.

Wo liegt denn jetzt überhaupt Dein Problem?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

das Problem ist folgendes:

ich schreibe ein kleines Programm, quasi eine WaWi, in dem der User mit der Taste 1 ein csv mit produktnummer, bezeichnung, preis usw einlesen soll.
Diese "Tabelle" soll er sich dann mit Taste 2 anschauen können. Mit Taste 3/4 abbuchen/hinzubuchen und mit 5 die aktuellen Werte, nach Abbuchung und Zubuchung wieder ins csv schreiben ... aber ich glaub ich seh vor lauter Bäumen den Wald nicht :(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und was klappt daran (noch) nicht? Du schriebst ja oben, dass das Einlesen geklappt hat - wo liegen denn jetzt noch die aktuellen Probleme? Geht es um das Menü?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

also das einlesen klappt, ich kanns mir dann auch ein einziges mal anzeigen lassen:

Code: Alles auswählen

csv.list_dialects()
                    file = 'bestaende.csv'
                    r = csv.DictReader(open (file))
                    b = ''
                    while (b != '0' and b != '7'):
                        b = input('Wählen Sie eine Option: ')
                        print (' ')
                        print (' ')
                        if (b == '2'):
                            for l in r:
                                print (l)
Damit wirft er mir das Dingen jetzt genau einmal aus.
Aber irgendwie muss ich das ja in ne Klasse packen, damit ich später in den anderen Menus auch was daran ändern kann, bzw in der jeweiligen Mengenspalte des Produkts ab oder zubuchen kann ... oder denke ich zu kompliziert?

Oder bin ich einfach zu dumm dazu ... das befürchte ich nämlich langsam :(
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Um Daten gleich weder Form ändern zu können, muss man den Code nicht einfach *magisch* in eine Klasse schreiben ;-)

Du musst Dir einfach ein Format ausdenken, welches Deine Daten abbilden kann und die gewünschten Zugriffs- bzw. Modifikationsoperationen unterstützt.

Mir fallen da spontan *Trommelwirbel* Listen ein!

Bau Dir eine zweidimensionale Liste; Über einen Indexzugriff kommst Du an eine einzelnes Item und kannst dieses Ändern. Das Aufabuen aus einem `csv.reader` sollte einfach sein - ich weiß nicht, ob der bereits Listen und Tupel zurückliefert, wenn ersteres, wäre das einfach:

Code: Alles auswählen

reader = csv.Reader(...)
data = [line for line in reader]
Ansonsten eben

Code: Alles auswählen

...
data = [list(line) for line in reader]
Nun brauchst Du eben Funktionen, die die Operationen auf der Datenstruktur durchführen. Das Einlesen haben wir jetzt ja fast schon ;-)

Ganz am Schluss musst Du Dir dann eben noch ein Menü schreiben, welches die einzelnen Funktionen aufrufbar macht - fertig ist die Laube :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

wohoooooo Hyperion! Das ist doch mal ein Ansatz auf dem ich evtl aufbauen kann :D

Werde das gleich heute abend mal testen udn berichten .. aber jetzt muss ich mal was schaffen .. mein Chef guckt schon agnz böse :D

danke dir VIELMALS!!!!!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sroken hat geschrieben:Aber irgendwie muss ich das ja in ne Klasse packen, damit ich später in den anderen Menus auch was daran ändern kann, bzw in der jeweiligen Mengenspalte des Produkts ab oder zubuchen kann ... oder denke ich zu kompliziert?
Ich glaube, für dich ist eine Klasse noch etwas magisches das dir helfen würde alle Probleme zu lösen wenn du nur das richtige Zauberwort wüsstest.

Wahrscheinlich willst du einfach zu viel am Anfang. Bist du im Tutorial denn wirklich schon beim Thema Klassen angekommen? Wenn ja, welche Probleme hast du dann konkret? Wenn nein, dann arbeite dich einfach weiter langsam durch bis du dort ankommst. Du kannst bis dahin problemlos Python-Programme schreiben ohne eine einzige eigene Klasse zu definieren. Grundlegende Datentypen und Datenstrukturen wie Tupel, Listen und Dictionaries solltest du allerdings kennen.
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

/me hat geschrieben: Ich glaube, für dich ist eine Klasse noch etwas magisches das dir helfen würde alle Probleme zu lösen wenn du nur das richtige Zauberwort wüsstest.
Ich glaub das trifft den Nagel auf den Kopf ;)
BlackJack

@sroken: Ich denke Du solltest das Programm erst einmal auf Eis legen bis Du das Tutorial in der Python-Dokumentation mindestens bis zum Thema Funktionen (inklusive) durchgearbeitet hast. Es macht wenig Sinn ein für Anfänger relativ umfangreiches Programm mit Menü anzufangen, solange man nicht die Grunddatentypen kennt und weiss wie man ein Programm auf Funktionen aufteilen kann.
sroken
User
Beiträge: 11
Registriert: Donnerstag 12. Januar 2012, 14:30

BlackJack hat geschrieben:@sroken: Ich denke Du solltest das Programm erst einmal auf Eis legen bis Du das Tutorial in der Python-Dokumentation mindestens bis zum Thema Funktionen (inklusive) durchgearbeitet hast. Es macht wenig Sinn ein für Anfänger relativ umfangreiches Programm mit Menü anzufangen, solange man nicht die Grunddatentypen kennt und weiss wie man ein Programm auf Funktionen aufteilen kann.

Nehm ich mir zu Herzen ... also heute abend erstmal ordentliche Lektüre lesen ;)
Antworten