Verzeichnisstruktur abbilden
Verfasst: Mittwoch 25. Mai 2011, 18:39
Hallo allerseits,
nachdem ich jetzt weiß wie ich über ein Dictionary beliebiger Tiefe scannen kann http://www.python-forum.de/viewtopic.php?f=1&t=26453, kommt hier jetzt die Anwendung.
Ich bekomme Daten in der Form vonsprich, jedes Verzeichnis hat eine ID und eine ParentID. Von dem Ausgehend bau ich mir eine Verzeichnisstruktur auf.
Das Problem ist nun, dass ich keine Annahme über die Reihenfolge der Daten machen kann. Es kann also vorkommen, dass ein Verzeichnis auftaucht, für den es noch keinen Parent gibt.
Das ganze hab ich mit random.shuffel gelöst. Ich handel mir aber mit der Lösung ein nicht-deterministisches verhalten ein: Das Programm könnte beliebig lang rumrattern.
Bisher sieht das ganze so aus:
Kleine Anmerkung: Directories mit parentid 0 sind im Hauptverzeichnis. Die habe ich vorher schon in die Verzeichnisstruktur hinzugefügt.
Vollständigkeits halber: iter_deep is so definiert:
Geht das vielleicht auch ohne die Directory Klasse, oder vielleicht ganz anders?
Grüße,
anogayales
nachdem ich jetzt weiß wie ich über ein Dictionary beliebiger Tiefe scannen kann http://www.python-forum.de/viewtopic.php?f=1&t=26453, kommt hier jetzt die Anwendung.
Ich bekomme Daten in der Form von
Code: Alles auswählen
Directory = namedtuple('Dir', ['id', 'name', 'parentid'])Das Problem ist nun, dass ich keine Annahme über die Reihenfolge der Daten machen kann. Es kann also vorkommen, dass ein Verzeichnis auftaucht, für den es noch keinen Parent gibt.
Das ganze hab ich mit random.shuffel gelöst. Ich handel mir aber mit der Lösung ein nicht-deterministisches verhalten ein: Das Programm könnte beliebig lang rumrattern.
Bisher sieht das ganze so aus:
Code: Alles auswählen
from random import shuffle
while unsorted_dirs:
shuffle(unsorted_dirs)
no_parent = unsorted_dirs.pop()
found = False
scan = iter_deep(folder_hierarchy)
for pair in scan:
dir, contents = pair
if dir.id == no_parent.parentid:
contents[no_parent] = {}
found = True
break
if not found:
# Parent not found in folder hierarchy, adding to list
unsorted_dirs.append(no_parent)
found = FalseVollständigkeits halber: iter_deep is so definiert:
Code: Alles auswählen
def iter_deep(input):
for key, value in input.iteritems():
if isinstance(value, dict):
yield key, value
for i in iter_deep(value):
yield i
else:
yield key, valueGrüße,
anogayales