ordnen des inhaltes im verz.-baums

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
golf
User
Beiträge: 8
Registriert: Dienstag 24. Juni 2008, 10:20

Dienstag 24. Juni 2008, 10:32

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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 24. Juni 2008, 11:36

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.
golf
User
Beiträge: 8
Registriert: Dienstag 24. Juni 2008, 10:20

Dienstag 24. Juni 2008, 11:51

danke ...
eine frage habe ich noch:
wo soll ich dann das listdir() hinschreiben???
habe immer so meine Probleme mit der syntax
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 24. Juni 2008, 12:05

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)
golf
User
Beiträge: 8
Registriert: Dienstag 24. Juni 2008, 10:20

Dienstag 24. Juni 2008, 12:14

boah.....

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

tasuend dank
Antworten