Ordner rekursiv durchsuchen

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
da-ker
User
Beiträge: 7
Registriert: Freitag 2. November 2007, 22:21

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 :)
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Schau dir mal das Modul os an. Da gibt es eine Funktion namens walk.

Oder fsl

Oder dirssync

hth, querdenker
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
da-ker
User
Beiträge: 7
Registriert: Freitag 2. November 2007, 22:21

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...^^
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.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

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')
Antworten