987 Stimmen

Abrufen einer Liste aller Unterverzeichnisse im aktuellen Verzeichnis

Gibt es eine Möglichkeit, eine Liste aller Unterverzeichnisse im aktuellen Verzeichnis in Python zurückzugeben?

Ich weiß, dass man das mit Dateien machen kann, aber ich muss stattdessen die Liste der Verzeichnisse bekommen.

15voto

Marcus Schommler Punkte 139

Da ich bei der Verwendung von Python 3.4 und Windows UNC-Pfaden über dieses Problem gestolpert bin, hier eine Variante für diese Umgebung:

from pathlib import WindowsPath

def SubDirPath (d):
    return [f for f in d.iterdir() if f.is_dir()]

subdirs = SubDirPath(WindowsPath(r'\\file01.acme.local\home$'))
print(subdirs)

Pathlib ist neu in Python 3.4 und macht die Arbeit mit Pfaden unter verschiedenen Betriebssystemen viel einfacher: https://docs.python.org/3.4/library/pathlib.html

14voto

Joost Döbken Punkte 2777

Diese Frage ist jedoch schon vor langer Zeit beantwortet worden. Ich möchte empfehlen, die pathlib Modul, da dies ein robuster Weg ist, um unter Windows und Unix OS zu arbeiten.

Um also alle Pfade in einem bestimmten Verzeichnis einschließlich der Unterverzeichnisse zu erhalten:

from pathlib import Path
paths = list(Path('myhomefolder', 'folder').glob('**/*.txt'))

# all sorts of operations
file = paths[0]
file.name
file.stem
file.parent
file.suffix

usw.

12voto

Andrew Schreiber Punkte 13284

Kopieren Einfügen freundlich in ipython :

import os
d='.'
folders = list(filter(lambda x: os.path.isdir(os.path.join(d, x)), os.listdir(d)))

Ausgabe von print(folders) :

['folderA', 'folderB']

11voto

KurtB Punkte 554

Danke für die Tipps, Leute. Ich bin auf ein Problem mit Softlinks (unendliche Rekursion) gestoßen, die als Verzeichnisse zurückgegeben werden. Softlinks? Wir wollen keine stinkenden Softlinks! Also...

Dabei wurden nur die Verzeichnisse gerendert, nicht die Softlinks:

>>> import os
>>> inf = os.walk('.')
>>> [x[0] for x in inf]
['.', './iamadir']

10voto

Brian Burns Punkte 17530

Hier sind ein paar einfache Funktionen, die auf dem Beispiel von @Blair Conrad basieren -

import os

def get_subdirs(dir):
    "Get a list of immediate subdirectories"
    return next(os.walk(dir))[1]

def get_subfiles(dir):
    "Get a list of immediate subfiles"
    return next(os.walk(dir))[2]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X