ich habe ein echtes Verständnisproblem welches mich so langsam wirklich ratlos lässt. Als Python Neuling kann es natürlich sein, dass ich einen Fehler mache. Ursprünglich komme ich aus der C Welt wo es doch oft deutlich strenger zugeht.

Zu meinem Thema. Ich habe eine externe xml-Datei, welche ich Zeile für Zeile parse um eine Menüstruktur in einer Liste abzulegen. Das Menü ist in zwei Ebenen aufgeteilt. Also in Etwa:
Menu1
Menu1.1
Menü1.2
....
Menu2
Menu2.1
...
usw.
Hierfür möchte ich erst einmal eine Liste mit den Hauptmenüs plus deren Inhalt haben. Also wie folgt:
Liste 1 = Menu1 plus Untermenüs
Liste 2 = Menu2 plus Untermenüs
...
Am Ende dann eine Liste mit allen Menüs: [[Menu1], [Menu2]...]
Idee:
Ein Menu wird gestartet mit dem string <treeitem>
beendet wird es mit dem string </menuitem>
Ich bestimme also die Menü-Tiefe und wenn diese >0 ist bin ich einem Untermenü bzw. dessen Untermenüs. Solange sammle ich alle Zeilen mit der Liste "sub_menu_list" ein. Sobald das Level 0 erreicht bin ich wieder bei der Hauptstruktur und hänge alle gesammelten Zeilen (also die Liste "sub_menu_list") der Liste menu_list an. Dann lösche ich den Inhalt von sub_menu_list und weiter geht es.
Das Erstaunliche:
Die Liste sub_menu_list wird stets korrekt gefüllt. Ich prüfe dies direkt vor der Zeile menu_list.append. D.h. der Inhalt welchen ich anhängen möchte ist korrekt und vorhanden. Sehe ich mir allerdings die menu_list vor dem Löschen der sub_menu_list an dann fehlt der erste Eintrag. Sehe ich mir die menu_list NACH dem Löschen der sub_menu_list an fehlen alle Einträge. Das Ergebnis ist dann für die 17 Einsprünge in die elif section:
[ [ ] ]
[ [ ], [ ] ]
[ [ ], [ ], [ ] ]
.....
[ [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ] ]
Code: Alles auswählen
for line in input_file:
if '<treeitem' in line:
tree_level += 1
elif '</treeitem>' in line:
tree_level -= 1
else:
pass
if tree_level > 0:
sub_menu_list.append(line)
elif tree_level == 0 and len(sub_menu_list) > 0:
print(sub_menu_list) # at this point sub_menu_list is filled with the correct data!
menu_list.append(sub_menu_list)
test_counter += 1
print(test_counter) # number of loops fit to the menu structure --> correct
print(sub_menu_list) # this is always correct, even at the first run
print(menu_list) # first strange behavior: the very first element is empty. The first sub_menu_list hasn't been appended but all the others
while len(sub_menu_list) > 0:
del sub_menu_list[0]
print(menu_list) # at this point menu_list is filled with 17 * []. The number of [] is correct as we have 17 main menus. But why are they empty as I only append filled lists to this list???
else:
pass
Um ehrlich zu sein stehe ich der Verzweiflung nahe denn ich kann schon Mal überhaupt gar nicht verstehen wie es möglich ist dass .append stets mit korrektem Inhalt ausgeführt wird und dann doch zu einer leeren Liste führt. auch verstehe ich überhaupt nicht wie es möglich ist dass das Löschen der Liste sub_menu_list überhaupt einen Einfluss nehmen kann auf ein vollkommen anderes Objekt, nämlich menu_list. Dort sind ja bereits Inhalte vorhanden. Warum ist die Menü Liste VOR dem Löschen der Sub MEnü Liste noch gefüllt während sie direkt nach dem Löschen wieder leer ist?
Bin um Hilfe dankbar.
