für den Titel muss ich mich entschuldigen, aber sollte ja halbwegs aussagekräftig sein Dazu sei gesagt: Ich bin totaler Python-Neuling und nur zu der Sprache gekommen, weil Excel-Makros zu langsam für den Job sind und Python ein gutes CSV-Import-Modul hat. Ich muss nämlich 150.000+ Zeilen ordentlich in die Mangel nehmen. Freude. Jetzt gerade häng ich aber und komme ohne Hilfe nicht weiter.
Ich lese die CSV-Datei problemlos ein, übernehme die Zeilen als Dictionary in eine Liste und entferne die Werte, die mir nicht passen. Anschließend möchte ich die Liste sortieren, und zwar anhand mehrerer Schlüssel (Bestellnummer, Bestellposition, Bearbeitungsreihenfolge). Dazu habe ich Quicksort implementiert und eine weitere Funktion sort() geschrieben, die quicksort() mit der zu sortierenden Liste und den Sortierkriterien aufruft.
In der Funktion sort() werden die Schlüssel einer nach dem anderen durchlaufen. Ist es der erste Schlüssel, wird die Liste vollständig sortiert. Danach werden erst Teilbereiche festgelegt, über die nach dem Unterschlüssel sortiert werden soll, und dann für diese Teilbereiche noch einmal quicksort() aufgerufen. Das klappt soweit auch ganz gut. Nach dem ersten Durchlauf ist die Liste nach dem ersten Schlüssel sortiert. Nach dem zweiten Durchlauf ist die Liste nach dem ersten und zweiten Schlüssel sortiert. Nach dem dritten Durchlauf jedoch ist die Liste nur noch nach dem ersten und dritten Schlüssel sortiert. Anschaulich:
Rohmaterial:
Nach zweitem Durchlauf:07SO00102 , 1 , 03 B1
06SO06950 , 1 , 03 B1
05SO06118 , 1 , 03 B1
07SO00105 , 1 , 03 B1
06SO06949 , 1 , 03 B1
04SO00710 , 1 , 03 B1
04SO00708 , 1 , 03 B1
03SO03948 , 1 , 03 B1
07SO00063 , 1 , 03 B1
06SO04419 , 1 , 03 B1
Nach drittem Durchlauf:02SA00002 , 1 , 3 01
02SA00002 , 1 , 4 01
02SA00002 , 1 , 2 01
02SA00002 , 1 , 1 01
02SA00002 , 3 , 2 01
02SA00002 , 3 , 3 01
02SA00002 , 3 , 1 01
02SA00002 , 3 , 4 01
02SA00002 , 4 , 1 2
02SA00002 , 4 , 1 1
Der Einfachheit halber stell ich mal den ganzen Code ein. Der Aufruf der Sortierfunktion erfolgt beim ersten Block ganz unten.02SA00002 , 3 , 1 01
02SA00002 , 1 , 1 01
02SA00002 , 4 , 1 1
02SA00002 , 4 , 1 2
02SA00002 , 3 , 2 01
02SA00002 , 1 , 2 01
02SA00002 , 1 , 3 01
02SA00002 , 3 , 3 01
02SA00002 , 1 , 4 01
02SA00002 , 3 , 4 01
analysis.py: http://paste.pocoo.org/show/11448/
quicksort.py: http://paste.pocoo.org/show/11449/
Falls ich die langen Zeilen das nächste Mal umbrechen soll, bitte kurz Bescheid sagen. Ich hab jetzt keine Lust mehr die Forenregeln oder Ähnliches zu lesen, weil's hier doch schon recht spät ist und ich auch gern mal nach Hause würd'
Bin für jede Hilfe dankbar! Wenn's schon ein Modul gibt, das erledigt, was ich haben will, bin ich auch gern bereit das statt meinem Gefrickel zu benutzen. Immer her damit
Edit (BlackJack): Quelltext ausgelagert.