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.

5voto

Alberto A Punkte 1132

Ich hatte vor kurzem eine ähnliche Frage, und ich fand heraus, dass die beste Antwort für Python 3.6 (wie Benutzer havlock hinzugefügt) zu verwenden ist os.scandir . Da es anscheinend keine Lösung dafür gibt, werde ich meine eigene hinzufügen. Zunächst eine nicht-rekursive Lösung, die nur die Unterverzeichnisse direkt unter dem Stammverzeichnis auflistet.

def get_dirlist(rootdir):

    dirlist = []

    with os.scandir(rootdir) as rit:
        for entry in rit:
            if not entry.name.startswith('.') and entry.is_dir():
                dirlist.append(entry.path)

    dirlist.sort() # Optional, in case you want sorted directory names
    return dirlist

Die rekursive Version würde wie folgt aussehen:

def get_dirlist(rootdir):

    dirlist = []

    with os.scandir(rootdir) as rit:
        for entry in rit:
            if not entry.name.startswith('.') and entry.is_dir():
                dirlist.append(entry.path)
                dirlist += get_dirlist(entry.path)

    dirlist.sort() # Optional, in case you want sorted directory names
    return dirlist

bedenken Sie, dass entry.path gibt den absoluten Pfad des Unterverzeichnisses an. Falls Sie nur den Ordnernamen benötigen, können Sie entry.name stattdessen. Siehe os.DirEntry für weitere Einzelheiten über die entry Objekt.

5voto

umesh Punkte 51

Mit os walk

sub_folders = []
for dir, sub_dirs, files in os.walk(test_folder):
    sub_folders.extend(sub_dirs)

3voto

Yossarian42 Punkte 1792

Dadurch werden alle Unterverzeichnisse bis hinunter zum Dateibaum aufgelistet.

import pathlib

def list_dir(dir):
    path = pathlib.Path(dir)
    dir = []
    try:
        for item in path.iterdir():
            if item.is_dir():
                dir.append(item)
                dir = dir + list_dir(item)
        return dir
    except FileNotFoundError:
        print('Invalid directory')

pathlib ist neu in Version 3.4

3voto

Matthew Ashley Punkte 56

Funktion, die eine Liste aller Unterverzeichnisse innerhalb eines gegebenen Dateipfads zurückgibt. Durchsucht den gesamten Dateibaum.

import os

def get_sub_directory_paths(start_directory, sub_directories):
    """
    This method iterates through all subdirectory paths of a given 
    directory to collect all directory paths.

    :param start_directory: The starting directory path.
    :param sub_directories: A List that all subdirectory paths will be 
        stored to.
    :return: A List of all sub-directory paths.
    """

    for item in os.listdir(start_directory):
        full_path = os.path.join(start_directory, item)

        if os.path.isdir(full_path):
            sub_directories.append(full_path)

            # Recursive call to search through all subdirectories.
            get_sub_directory_paths(full_path, sub_directories)

return sub_directories

2voto

dbz Punkte 399

Diese Funktion, mit einer gegebenen übergeordneten directory iteriert über alle seine directories rekursiv und prints alle filenames die sie im Inneren findet. Zu nützlich.

import os

def printDirectoryFiles(directory):
   for filename in os.listdir(directory):  
        full_path=os.path.join(directory, filename)
        if not os.path.isdir(full_path): 
            print( full_path + "\n")

def checkFolders(directory):

    dir_list = next(os.walk(directory))[1]

    #print(dir_list)

    for dir in dir_list:           
        print(dir)
        checkFolders(directory +"/"+ dir) 

    printDirectoryFiles(directory)       

main_dir="C:/Users/S0082448/Desktop/carpeta1"

checkFolders(main_dir)

input("Press enter to exit ;")

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