Seite 1 von 1

ordnen des inhaltes im verz.-baums

Verfasst: Dienstag 24. Juni 2008, 10:32
von golf
hallo,
und zwar habe ich folgendes Problem:

ich habe einen Code, der mir ein verzeichnis ausliest welches ich dann als verzeichnisbaum darstellen möchte.

hier der code:

Code: Alles auswählen


import os

pc=['dws-2k', 'dws-ct', 'dws-herold', 'dws-krumpolt', 'dws-mrt', 'dws-mrt2', 'dws-mtra']
e = {}

for i in pc:
	e[i] = []
	for t in os.walk("/mnt/"+i):
    		e[i].append(t)

das mit dem auslesen klappt ja.
aber es wird mir nicht im verzeichnisbaum dargstellt.

naja da habe ich dann noch das unter den obigen text geschrieben:

Code: Alles auswählen

('mnt', ['dws-2k', 'dws-ct', 'dws-herold', 'dws-krumpolt', 'dws-mrt', 'dws-mrt2', 'dws-mtra'], [])
('mnt\\dws-mtra', ['Bieder_Simon_00215395'])
('mnt\\dws-mtra\\Bieder_Simon_00215395', [], ['0006797245_20080209'])
('mnt\\dws-mtra\\Bieder_Simon_00215395\\0006797245_20080209', [], ['6560135.jpg'])
dass das geordnet wird.
das fkt. aber nicht wie gedacht ... es kommt klein verz.-baum
naja jetzt habe ich das über kmdo.-zeile gemacht,
da hat mein chef gesagt das muss jetzt geordnet werden weil einiges doppelt angezigt wird.

wie mache ich das mit ordnen und das keine doppelt sind ???
hoffe es kann mir jemand helfen ...

danke schonmal

Verfasst: Dienstag 24. Juni 2008, 11:36
von EyDu
Wie soll denn "walk" auf magische Weise einen Baum in e erstellen ;-) ? Da fehlt die für den Baum benötigte Rekursion. Mit "listdir" ist die Programmierung vielleich etwas intuitiver.

Du kannst übrigens auch direkt über die Elemente einer Liste laufen, wenn du den index brauchst, dann verwendest du enumerate:

Code: Alles auswählen

for index, element in enumerate(pc):
    e[index] = ...
Und Pfade zusammensetzen solltest du mit der "os.path.join"-Funktion und nicht durch einfache Konkatenation zweier Strings.

Verfasst: Dienstag 24. Juni 2008, 11:51
von golf
danke ...
eine frage habe ich noch:
wo soll ich dann das listdir() hinschreiben???
habe immer so meine Probleme mit der syntax

Verfasst: Dienstag 24. Juni 2008, 12:05
von EyDu
Hatte gerade etwas Zeit:

Code: Alles auswählen

from os import listdir
from os.path import isdir, isfile, join
from functools import partial

folders = ["."]

def build_tree(folders):
    return [(folder, build_sub_tree(folder, folder)) for folder in folders]

def build_sub_tree(folder, folder_long):
    rel_dir = listdir(folder_long)
    abs_dir = map(partial(join, folder_long), rel_dir)
    zip_dir = zip(rel_dir, abs_dir)
    
    files = [r for r, a in zip_dir if isfile(a)]
    folders = [(r, build_sub_tree(r, a)) for r, a in zip_dir if isdir(a)]

    return folders + files
    

print build_tree(folders)

Verfasst: Dienstag 24. Juni 2008, 12:14
von golf
boah.....

*sprachlos*
das hätte nicht sein müssen... aber trotzdem danke

tasuend dank