mein Problem hängt mit Listen , bzw.mit zweidimensionalen Arrays zusammen. Ich verwende Arrays bei meiner kleinen Anwendung an mehreren Stellen, und hab die Erfahrung, dass sie genauso funktionieren wie in anderen Programmiersprechen, ich kann sie gut anwenden. Wie ich sie jetzt verwenden möchte, da hat aber Python höchstwahrscheinlich eine Eigenschaft/Logik/Vorgehensweise, die für mich noch unbekannt ist.
Ich lese ein File ein, dann suche ich nach bestimmten Zeilen im File. Das File wird zeilenweise eingelesen, und es wird mit einer for-Schleife bis zum Ende durchgeblättert. Immer wenn ich eine Zeile finde, nach der ich suche, zerlege ich sie mit split() , und ich speichere die dann in eine Liste. Diese Liste speichere ich von dort weg (in ein zweidimensionales Array), weil beim nächsten Durchlauf der for-Schleife neue Werte reinkommen werden. Das geht aber mit meinem Script insofern schief, dass wenn da neue Werte reinkommen, dann ändern sich auch die Werte der früher weggespeicherten Listen nachträglich. Als würde Python statt die Werte einfach nur die Links auf die Werte speichern, und wenn sie sich ändern, dann ändern sich die Werte auch. Das will ich aber nicht. Ich möchte die Werte speichern. Wie mache ich es richtig?
(Im Script sind die Inhalte so weit es geht vereinfacht, und die Schreibweise des Scripts so weit es geht übersichtlich. Ich weiß, dass es einfacher, kürzer, eleganter auch ginge, wollte nur selber auch so debuggen, bzw. euch so herzeigen, weil es so vielleicht eindeutiger ist.)
Code: Alles auswählen
for AktuelleZeile in ReadFile:
w_zeilenNr += 1
if 'SUCHSTRING' in AktuelleZeile:
AktuelleZeile_Liste = AktuelleZeile.split(';')
for i in range(0, len(AktuelleZeile_Liste)):
if 'A' in AktuelleZeile_Liste[i]:
A_inList = get_value(AktuelleZeile_Liste[i])
if 'B' in AktuelleZeile_Liste[i]:
B_inList = get_value(AktuelleZeile_Liste[i])
if 'C' in AktuelleZeile_Liste[i]:
C_inList = get_value(AktuelleZeile_Liste[i])
if 'D' in AktuelleZeile_Liste[i]:
D_inList = get_value(AktuelleZeile_Liste[i])
if 'E' in AktuelleZeile_Liste[i]:
E_inList = get_value(AktuelleZeile_Liste[i])
if 'F' in AktuelleZeile_Liste[i]:
F_inList = get_value(AktuelleZeile_Liste[i])
if 'G' in AktuelleZeile_Liste[i]:
G_inList = get_value(AktuelleZeile_Liste[i])
AktuelleZeile_Liste_Kopie[0] = A_inList
AktuelleZeile_Liste_Kopie[1] = B_inList
AktuelleZeile_Liste_Kopie[2] = C_inList
AktuelleZeile_Liste_Kopie[3] = D_inList
AktuelleZeile_Liste_Kopie[4] = E_inList
AktuelleZeile_Liste_Kopie[5] = F_inList
AktuelleZeile_Liste_Kopie[6] = G_inList
if ZeileNr == 1:
Liste_Nr1 = AktuelleZeile_Liste_Kopie
MeinArray.append(Liste_Nr1)
if ZeileNr == 2:
Liste_Nr2 = AktuelleZeile_Liste_Kopie
MeinArray.append(Liste_Nr2)
if ZeileNr == 3:
Liste_Nr3 = AktuelleZeile_Liste_Kopie
MeinArray.append(Liste_Nr3)
MeinArray = [['2', '4', '6', '8', '10', '12', '14', '16']]
Ergebnis nach dem Durchlauf mit ZeileNr == 2
MeinArray = [['3', '6', '9', '12', '15', '18', '21', '24'], ['3', '6', '9', '12', '15', '18', '21', '24']]
Ergebnis nach dem Durchlauf mit ZeileNr == 3
MeinArray = [['4', '8', '12', '16', '20', '24', '28', '32'], ['4', '8', '12', '16', '20', '24', '28', '32'], ['4', '8', '12', '16', '20', '24', '28', '32']]
Mein Ziel wäre ja, dass ich am Ende Folgendes bekomme:
MeinArray = [['2', '4', '6', '8', '10', '12', '14', '16'], ['3', '6', '9', '12', '15', '18', '21', '24'], ['4', '8', '12', '16', '20', '24', '28', '32']]
Beim Debuggen sehe ich aber, dass wenn der Script mit 'ZeileNr == 2' durchläuft und zur Zeile 'AktuelleZeile_Liste_Kopie[0] = A_inList' kommt, dann ändert sich der Wert 'meinArray[0][0]' sofort auf '3', also 'meinArray' schaut sofort so aus: 'MeinArray = [['3', '4', '6', '8', '10', '12', '14', '16']]' , also der erste Wert ändert sich sofort von 2 auf 3. Das heißt, ich gebe da nur die Links weiter, und nicht die konkrete Werte.
Wie könnte ich den Script so ändern, dass es das tut, was ich damit erreichen will?
Vielen Dank für eure Tipps!
Liebe Grüße, Anna