Seite 1 von 1

Ordner rekursiv durchsuchen

Verfasst: Freitag 2. November 2007, 22:25
von da-ker
Hallo, bin neu hier...hab schon das ein oder andere mal mit python was gemacht, zur Zeit komm ich aber nicht weiter!

Und zwar will ich mir ein skript schreiben welches mir gewisse Daten synchronisiert, leider hab ich keine Ahnung wie ichs schaff das Unterordner und deren Unterordner aufgerufen werden!

Hab zwar hinweise mit einer sog. rekursiven Funktion gefunden aber irgendwie komm ich nicht drauf.

vllt kann mir ja jemand helfen, wär echt super.

MfG :)

Verfasst: Freitag 2. November 2007, 22:33
von querdenker
Schau dir mal das Modul os an. Da gibt es eine Funktion namens walk.

Oder fsl

Oder dirssync

hth, querdenker

Verfasst: Freitag 2. November 2007, 23:52
von Leonidas
querdenker hat geschrieben:Oder fsl

Oder dirssync
Oder rsync.

Oder Unison.

Letztendlich wäre es in der Tat wahrscheinlich sinnvoller wenn du ein bereits existierendes Tool verwendest, als etwas neues zu schreiben. Natürlich außer du hast irgendwelche speziellen Anforderungen, die nicht durch die genannten Programme abgedeckt werden.

Verfasst: Samstag 3. November 2007, 07:09
von da-ker
ok super...denke das hilft mir weiter...allerdings hab ich ja auch ne weile dran geknobbelt wie denn son algorithmus ausschauen müsste, wär super wenns mir jemand mal erklären könnte...

auch gern einfach mal in pseudocode wie so ne funktion aussehen würde die mir einfach jeden ordner durchsucht, in diesen ordner dann jeden unterordner usw...:) ha so viel getüfftelt aber es hat nie hingehauen...schlaf schon fast schlecht deswegen...^^

Verfasst: Samstag 3. November 2007, 09:41
von BlackJack
Nun der Pseudocode ist:

Code: Alles auswählen

Besuche Verzeichnis (Pfad)
    Tue etwas vor dem rekursiven Abstieg. (optional)
    Für jedes Verzeichnis in Pfad besuche Unterverzeichnis.
    Tue etwas nach dem rekursiven Abstieg. (optional)
Dazu brauchst Du mindestens `os.listdir()`, `os.path.join()`, und `os.path.isdir()`. Als Aktion vor dem Abstieg kannst Du den Inhalt des gerade besuchten Verzeichnisses ausgeben.

Verfasst: Samstag 3. November 2007, 12:03
von Y0Gi
Hier habe ich zwei Beispiele für dich, einmal mit ``os.walk()`` (implizit rekursiv, wenn ich mich recht erinnere) und einmal mit ``os.listdir()`` (explizit rekursiv):
- http://homework.nwsnet.de/snippets/view/35
- http://homework.nwsnet.de/snippets/view/36

Ein weiteres Beispiel findet sich im Indexer von File Catalog:

Code: Alles auswählen

import os


def walk(top):
    """Recursively traverse subdirectories.

    A hierarchical data structure with directory and file names is returned.
    """
    try:
        names = os.listdir(top)
    except os.error, err:
        return

    dirs, nondirs = [], []
    for name in names:
        path = os.path.join(top, name)
        if os.path.isdir(path) and not os.path.islink(path):
            dirs.append(walk(path))
        else:
            nondirs.append(name)
    dirs.sort()
    nondirs.sort()

    return {os.path.basename(top): dirs + nondirs}


# Beispiel:
structure = walk('/some/path')