Wie .csv Datei als Instanz einer Klasse einlesen&bearbeiten?

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
pinoy
User
Beiträge: 2
Registriert: Mittwoch 8. Februar 2012, 17:47

Hey,

ich muss für einen Kurs an der Uni ein kleines Warenwirtschaftsprogramm mit verschiedenen Funktionen schreiben. Ich habe schon eine Nutzeranmeldung mit Passwort und ein Menu mit verschiedenen Ausgaben geschrieben. Z.b. kommt im Menu wenn man 1 drückt:

Sie haben Option 1 gewählt: Lagerbestände eingelesen.

1;Teppich;17.89;400
2;Couch;500.0;29
3;Pflanze;4.5;100
4;Kreide;4.0;2
303;Tisch;20.45;400
408;Stuhl;10.99;1100
514;Hocker;3.99;1550
5; Heizungsventil; 19.99; 20
6; Teppich (blau); 18.99; 10

In meinem Code steht hierfür:
elif (c==1):
print("\nSie haben Option 1 gewählt: Lagerbestände eingelesen.\n")
myfile = open("C:\...\\bestaende.csv", "r")
for line in myfile:
print line.rstrip()
myfile.close()

Jetzt hänge ich an folgender Aufgabe fest:

Nun wollen Sie die eingelesenen Bestände nicht nur ausgeben, sondern auch „im Programm behalten“. .Hierzu können Sie z.B. eine eigene Klasse sowie eine dazu passende Datenstruktur verwenden. Jeder eingelesene Datensatz steht hierbei für eine Instanz dieser Klasse. Wenn Sie eine Klasse verwenden, benötigen sie für diese auch entsprechende Methoden. Abschließend bauen Sie Ihr Programm bitte so um, dass die Nutzerauswahl „1“ im Hauptmenü lediglich die Bestände aus der Datei einliest und die Nutzerauswahl „2“ dann die entsprechenden Bestände anzeigt.

und:


Nun soll bei Auswahl der Option „6“ die vorhandenen Bestände wieder in das File bestaende.csv geschrieben werden. Die bisherigen Bestände werden dadurch überschrieben. Achten Sie beim Schreiben in das File bitte auf korrekte Formatierungen und das passende Setzen von Semikolons zwischen den einzelnen Werte. Nachdem Sie alle Werte in die Datei geschrieben haben, schließen Sie die Datei.


Kann mir da bitte Jemand helfen???
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Lies dich doch mal über Klassen ein. Evtl. auch übers csv-Modul (wobei man das auch ohne lösen kann).

Und irgendwie kommt mir die Aufgabenstellung schon sehr bekannt vor. Sicher, dass das hier keine verpflichtende Hausaufgabe ist?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo,

ich würde auch jeden Fall dafür plädieren, das ``csv``-Modul zu nutzen. Schaut Euch doch mal an, was das für Datenstrukturen zurückliefert und ob Euch nicht damit ein Datentyp aus der StandardLib reicht (Listen, Dictionaries). Im Aufgabentext steht ja nichts verbindliches vom Anlegen einer eigenen Klasse.

Wenn Du hier Code postest, dann benutze bitte die Code-Tags (z.B. für das CSV-File) und für Python-Code die speziellen Python-Code-Tags. Damit bleiben u.a. die Einrückungen vorhanden, die ja für Python wichtig sind.

Dateien sollte man ürbigens so öffnen:

Code: Alles auswählen

with open(...) as handler:
    # handler ist hier Datei-Objekt
    # handler wird nach Verlassen dieses Blocks automatisch geschlossen
Wenn ich mir Euren Code so angucke, dann solltet Ihr dringend erst einmal besser strukturieren. Das riecht nach einem endlos langen Spaghettiprogramm a la:

Code: Alles auswählen

imports

while True:
    choice = ...
    if chocie == 1:
        # hier lauter Codezeilen der Funktionalität A
    elif choice == 2:
        # hier lauter Codezeilen der Funktionalität B
    ...
    elif ...
        # hier lauter Codezeilen der Funktionalität N
Das ist nicht gut! Schaut Euch doch mal andere Scipte an; grad aktuell hat ein Anfänger dieses gepostet. Da ist nicht alles perfekt, aber das Erstellen des Menüs und die Separierung in Funktionen an sich ist gut gelungen. Es gibt hier auch noch zig andere Beispiele dafür hier im Forum.

Wenn Du noch konkrete Fragen hast, dann melde Dich einfach wieder hier :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
pinoy
User
Beiträge: 2
Registriert: Mittwoch 8. Februar 2012, 17:47

ahhh vielen dank, das csv modul war genau was ich gesucht hab! :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

pinoy hat geschrieben:ahhh vielen dank, das csv modul war genau was ich gesucht hab! :)
Mein weiterer Beitrag war imho fast schon gewichtiger ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten