Python-Datei Parsen: Build-tree von text-Datei

Habe ich einen eingerückten text-Datei, die verwendet werden, um zu bauen, einen Baum. Jede Zeile repräsentiert einen Knoten und Einzüge stellen sowohl Tiefe als auch Knoten, der aktuelle Knoten ist ein Kind.

Beispielsweise eine Datei Aussehen könnte

ROOT 
Node1 
Node2 
Knoten3 
Knoten4 
Knoten5 
Node6 

Was bedeutet, dass ROOT enthält drei Kinder: 1, 5, und 6, Node1 hat ein Kind: 2, und Knoten 2 hat ein Kind: 3, etc.

Habe ich kommen mit einem rekursiven Algorithmus und haben es programmiert, und es funktioniert, aber es ist irgendwie hässlich und vor allem behandelt das Beispiel oben sehr grob (wenn man vom Knoten 4 zum Knoten 5)

Setzt es ein "indent-count" als Grundlage für die Rekursion, so dass, wenn die Anzahl der Einzüge = aktuelle Tiefe + 1, würde ich eine Ebene tiefer. Aber das bedeutet, wenn ich lese eine Zeile, die mit weniger abdrücken, ich habe wieder zu kommen, bis eine Ebene in einer Zeit, die überprüfung der Tiefe jedes mal.

Hier ist, was ich haben

def _recurse_tree(node, parent, Tiefe): 
tabs = 0 

während Knoten: 
tabs = Knoten.count("\t") 
wenn tabs == Tiefe: 
print "%s: %s" %(parent.Streifen(), node.strip()) 
elif tabs == Tiefe + 1: 
Knoten = _recurse_tree(Knoten, prev, Tiefe+1) 
tabs = Knoten.count("\t") 

#überprüfen, ob wir auf der Oberfläche einige mehr 
wenn tabs == Tiefe: 
print "%s: %s" %(parent.Streifen(), node.strip()) 
sonst: 
return-Knoten 
sonst: 
return-Knoten 

prev = node 
Knoten = inFile.readline().rstrip() 

inFile = open("test.txt") 
root = inFile.readline().rstrip() 
Knoten = inFile.readline().rstrip() 
_recurse_tree(node, root, 1) 

Jetzt bin ich nur den Druck aus den Knoten, um sicherzustellen, dass der übergeordnete Knoten ist korrekt für jede Zeile, aber vielleicht gibt es eine sauberere Möglichkeit, es zu tun? Vor allem der Fall in der elif-block, wenn ich komme zurück aus jeder Rekursion nennen.

InformationsquelleAutor der Frage That Umbrella Guy | 2011-05-20

Schreibe einen Kommentar