Hi. Gerne... im Prinzip hab ich auch einen rel. langen Quelltext, hab aber mal in Python's Buildin-kiste gekramt. Also zur 1. Zeile: da hab ich ein join verwendet. join fügt eine Liste von Strings zusammen und zwar mit dem String, den ich angegeben hab (","). Also würde aus ["ha","Ha"] ein "ha,Ha" werden. Wie die Liste gebildet wird erklär ich gleich. Ganz am Ende steht noch ein
+"," . Das ist das abschließende Komma, was nicht durch join gesetzt wird und deswegen so angefügt werden muss.
Und die Liste wird mit einer
List Comprehenshion gebildet. Das ist eigentlich eine Art for Schleife in einer Zeile. für jedes i aus einer Sequenz soll irgendetwas gemacht werden, die Einzelergebnisse werden zu einer Liste zusammengefügt. also so in etwa von der Schreibweise: [f(x) for x in sequenz]
Damit du das ganze mal besser verdauen kannst, hier mal alles aufgedröselt:
Code: Alles auswählen
liste=[]
for i in header:
if i[0]=="I":
liste.append("%s")
else:
liste.append('"%s"')
analyse=(',').join(liste)
analyse=analyse+","
Wie du siehst ist das also eine for-Schleife und das "and und or" Konstrukt ist nur eine If-Abfrage. Das ganze geht durch einne Trick in der Auswertung von Ausdrücken mit and und or, nimms jetzt erst mal so hin.
Zur zweiten Zeile: hier wird der analyse String verarbeitet. Als Ergebniss von oben dürfte er in etwa so hier aussehen:
Hier nutze ich aus, dass man Strings auf schöne Art und Weise "
formatieren" kann, indem man Sachen in den String einfügen lässt. Dazu schreibt man ein % und dahinter den Datentyp, der eingefügt wird. Aus der Tabelle vom Link kannst du ablesen, dass wenn man Strings einfügen will, ein %s schreiben muss. Danach gibt man hinter den String ein Tupel an, indem die Werte stehen, die einzufügen sind. Beispiel:
Code: Alles auswählen
>>> "In die Klammern kommt ein String: (%s)" % ("TestTest",)
'In die Klammern kommt ein String: (TestTest)'
Dafür hab ich einfach die frisch aus der Datei ausgelesenen Werte genommen. In line steckt eine Zeile der Datei inklusive Zeilensprung, dem "\n". Das soll weg, also das line.replace. Außerdem wollen wir die Werte nach den Semikolon getrennt haben, was split erledigt. Beispiel:
So, und schlussendlich brauch ich statt einer Liste aber nun ein Tupel, wie ich oben geschrieben hab. Also noch schnell ein Tuple drüber und fertig.
Zusammenfassung
: erst erstell ich mir ein Muster, was Python sagt, wie was ausgegeben werden muss (in der 1. Zeile) und in der 2. setze ich die Werte aus der Datei in das Muster ein.
Ich hoffe, das war nicht zu dick aufgetragen oder zuviel Theorie auf einmal... Ich hab das so gedrängt geschrieben, weil ich damit zurecht komme, aber wenn man es lesbarer haben will ist das auch kein Problem.
hth, Milan