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.
sum([[os.path.join(dirpath, filename) for filename in filenames] for dirpath, dirnames, filenames in os.walk('\download') if 3 <= dirpath.count(os.sep) <= 5], [])
@defnull: Das tut meinem Verständnis nach aber etwas anderes. Es zählt die absolute Anzahl der Ebenen ausgehend vom Wurzelverzeichnis, während "-mindepth" und "-maxdepth" von "find" sich auf die relative Anzahl der Ebenen ausgehend vom Suchverzeichnis bezieht.
Dein Code würde "/tmp/foo/bar" für das Verzeichnis "/tmp" akzeptieren, während "find" bei "-mindepth 3" für "/tmp" das Verzeichnis "/tmp/foo/bar" nicht berücksichtigt, sondern erst ab "/tmp/foo/bar/spam" anfängt.
Zudem sollte man vorher "normpath()" anwenden, damit die Anzahl der Verzeichnistrenner wirklich etwas über die Tiefe der Verzeichnisebene aussagt.
Wußte lange Zeit nicht, wie "find" funktioniert. Hatte hier irgendwann gelernt: Mit Rekursion.
Hatte dann mal eine Grundversion (ohne os.walk() oder os.path.walk()) nachgebaut, allerdings bislang ohne "-mindepth" und "-maxdepth":
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-
import os
def myfind(wd):
a = os.listdir(wd)
dirs = []
for i in a:
i = wd + "/" + i
if os.path.isdir(i):
dirs.append(i)
for adir in dirs:
print adir
for afile in os.listdir(adir):
print adir + "/" + afile
print
print
# Recursion needed:
myfind(adir)
myfind(os.getcwd())
Vielen Dank fuer die Antworten, ich sehe sie mir alle mal an. Das Lambda scheint echt nett zu sein, ich habe schon drei Funktionen damit in meiner Bibliothek. Das muss ich mir mal anschauen.
Mein Ansatz fuer ein "Pyfind" war bisher "os.walk", dann splitten des ganzen Dateipfades, zaehlen mit "len()" und eine "if" abfrage. Das alles plus eines Sockels wegen dem Startverzeichnis.