2012-09-14 12 views

Antwort

11

Es gibt nichts, was man verhindern, dass eine eigene Funktion zu erstellen:

import os 

def listfiles(folder): 
    for root, folders, files in os.walk(folder): 
     for filename in folders + files: 
      yield os.path.join(root, filename) 

Sie können es verwenden, etwa so:

for filename in listfiles('/etc/'): 
    print filename 
+0

Danke! Ich wollte nur sicherstellen, dass diese Funktion nicht bereits Teil der Standardbibliothek ist. –

+1

Ich wünschte, man existiere. Sie können immer 'os.py' bearbeiten;) – Blender

+0

Schöne Lösung! Aber "find." Listet auch Verzeichnisse auf. Die Lösung ist jedoch sehr einfach. :) –

1

Entweder das, oder manuell Rekursion mit isdir()/isfile() und listdir() oder Sie könnten subprocess.check_output() verwenden und find . nennen. Basiziell os.walk() ist höchste Ebene, etwas niedrigere Ebene ist semi-manuelle Lösung basierend auf listdir() und wenn Sie möchten, dass die gleiche Ausgabe find . Ihnen aus irgendeinem Grund geben Sie einen Systemanruf mit subprocess.

+0

+1 für 'os.walk()' verwenden. – Blender

0
import os 
path = "path/to/your/dir" 
for (path, dirs, files) in os.walk(path): 
    print files 

diese trieben, oder bin ich etwas fehlt?

+0

Sie haben absolut Recht. Es sieht viel schwieriger aus, als es tatsächlich ist. –

4

os.walk() ist auf keinen Fall übertrieben.

files = [os.path.join(dirpath, filename) 
    for (dirpath, dirs, files) in os.walk('.') 
    for filename in (dirs + files)] 

Sie können machen dieses zu einem Generator, nur Prozess einen Weg zu einem Zeitpunkt und sicher auf das Gedächtnis: Es kann Ihre Liste der Dateien und Verzeichnisse in einem Jiffy erzeugen.

+0

+1 für die meisten Pythonic Lösung :) – kgr

1

Sie könnten auch das find Programm selbst aus Python von sh

import sh 
text_files = sh.find(".", "-iname", "*.txt") 
Verwandte Themen