Seite 1 von 1
Verständnisprobleme mit Schleife und while
Verfasst: Sonntag 7. Oktober 2012, 13:21
von martinjo
Hallo
Ich habe eine große CSV Datei zum auswerten - leider können die freien Office Programme die Datei nicht richtig darstellen (teilweise zu viele Zeilen pro Zelle).
Jedenfalls habe ich mir zum auswerten ein Skript ǵeschrieben, dass soweit auch funktioniert. Allerdings hätte ich noch ein paar Fragen dazu.
Ich poste es mal hier damit ich besser die Zeilennummern beschreiben kann:
http://pastebin.com/TpvNih7Q
Ich definiere in Zeile 12
Code: Alles auswählen
tl_csv_reader = csv.DictReader(codecs.open(tl_csv_file, "rb"),delimiter=';'"
Wenn ich es nur dort definiere funktioniert das Skript 1x, sprich ein mal kann ich nach einem Code suchen und bekomme ein Ergebnis. Beim zweiten mal ist das Ergebnis immer Null. Deshalb muss ich es bei jedem Durchlauf neu definieren, Zeile 24. Das verstehe ich nicht.
Das zweite ist die Bedingung in Zeile 23,
In Zeile 43 definiere ich ja new_search aber selbst wenn der Wert dann "n" ist läuft die Schleife weiter durch.
Freue mich auf Hinweise, Danke.
Re: Verständnisprobleme mit Schleife und while
Verfasst: Sonntag 7. Oktober 2012, 13:47
von pillmuncher
Wenn du eine Datei öffnest, musst du sie auch wieder schließen:
Code: Alles auswählen
f = open('myfile.txt')
try:
... # read from f
finally:
f.close()
Oder besser:
Dabei wird die Datei automatisch wieder geschlossen.
[EDIT]
Das bezog sich übrigens auf deine Zeile 12. Statt
Code: Alles auswählen
tl_csv_reader = csv.DictReader(codecs.open(tl_csv_file, "rb"),delimiter=';')
also bitte
Code: Alles auswählen
with codecs.open(tl_csv_file, "rb") as tl:
...
tl_csv_reader = csv.DictReader(tl,delimiter=';')
...
Re: Verständnisprobleme mit Schleife und while
Verfasst: Sonntag 7. Oktober 2012, 14:09
von BlackJack
@martinjo: Wenn der Iterator am Ende ist, dann ist er „aufgebraucht” und Du musst einen neuen erstellen. Die Definition in Zeile 12 kannst Du Dir also sparen.
Wie führst Du das ganze aus? Eventuell aus Eclipse heraus? Da ist `raw_input()` nämlich kaputt und liefert nicht das was man eigentlich erwarten würde.
Re: Verständnisprobleme mit Schleife und while
Verfasst: Sonntag 7. Oktober 2012, 16:39
von martinjo
Wenn der Iterator am Ende ist, dann ist er „aufgebraucht” und Du musst einen neuen erstellen.
Danke, dieses Verhalten kannte ich bisher noch nicht.
Wie führst Du das ganze aus? Eventuell aus Eclipse heraus? Da ist `raw_input()` nämlich kaputt und liefert nicht das was man eigentlich erwarten würde.
Mit dem Gnome Terminal, es wir sicher ein String "n" gespeichert.
@pillmuncher: Ich schließe die Datei in Zeile 40, trotzdem Danke für die schönen Beispiele. Habe dein EDIT gerade gelesen und habe es dementsprechend verbessert.
Re: Verständnisprobleme mit Schleife und while
Verfasst: Sonntag 7. Oktober 2012, 16:52
von martinjo
Die Funktion wird beendet, wenn ich "n" eingebe, nur der Aufruf für die Funktion ist ja auch eine Schleife, somit hat sich das auch gelöst

.
Re: Verständnisprobleme mit Schleife und while
Verfasst: Sonntag 7. Oktober 2012, 17:21
von EyDu
martinjo hat geschrieben:@pillmuncher: Ich schließe die Datei in Zeile 40, trotzdem Danke für die schönen Beispiele. Habe dein EDIT gerade gelesen und habe es dementsprechend verbessert.
Nicht unbedingt

with hat hier durchaus mehrere Vorteile. So kommt es durchaus mal vor, dass irgendwo eine Exception geworfen wird. Dann sind unter Umständen bereits geschriebene Daten einfach verloren. Manchmal ist das ein Problem manchmal auch nicht. Hinzu kommt, dass man so ein close gerne mal übersieht, weil man irgendwo in die Funktion nun ein return eingebaut hat und das close nie erreicht. Das wird natürlich besonders dann problematisch, wenn man viele Dateien öffnet und nicht wieder schließt. Irgendwann ist das Limit der Dateihandles erreicht und dein Programm schmiert einfach ab. Mit dem with-Statement hast du alle die Probleme nicht mehr.
Du solltest dir auch noch den Edit von pillmuncher anschauen. Du schließt zwar die zu schreibende Datei, aber nicht die zu lesende.