Dateiliste oder Verzeichnisliste...

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich brauche eine Liste aller Dateien oder aller Verzeichnisse... Leider bietet os.listdir() immer beides an :( Drum hab ich mir hier was gebastelt:

Code: Alles auswählen

def getDirList( Pfad, FileNotDir = True ):
    """
    Liefert eine Liste mit alle Dateien (FileNotDir = True) oder alle Verzeichnisse (FileNotDir = False)
    im Verzeichnis Pfad zurück.
    """
    List = []
    for i in os.listdir( Pfad ):
        if FileNotDir and os.path.isfile( os.path.join( Pfad, i ) ):
            List.append( i )
        elif os.path.isdir( os.path.join( Pfad, i ) ):
            List.append( i )
    return List
Aber so richtig gefällt mir das noch nicht... Jemand eine günstigere Lösung??? (Muß mit Python 2.2.1 kompatibel sein)
Gast

Hi!
Ich weiß net recht, ob es sich lohnt für etwas, für das man sonst nur eine zeile code braucht (s.u.), einen funktion zu basteln.

Code: Alles auswählen

files = [f for f in os.listdir(pth) if os.path.isfile(os.path.join(pth,f))]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Naja, ok, aber es ist vom Prinzip die selbe Vorgehensweise...
Ich find's halt ziemlich umständlich... Schön wäre, wenn man os.listdir() schon direkt sagen könnte, ob man Dateien+Verz oder nur Dateien / nur Verz. haben will...

Wobei wenn man sich /Lib/os.py anschaut, dann wird bei os.walk() eigentlich das selbe gemacht. Also es wird auch mit isfile() / isdir() gearbeitet...
Gast

Was mir bei deinem ansatz nicht gefällt, ist dass du auf isdir und isfile festgenagelt bist. ismount oder islink oder ein ganz anderes filterkriterium bleibt außen vor. Sowas ist vielleicht universeller:

Code: Alles auswählen

import os

def getDirList(Pfad, filterFkt):
   return [f for f in os.listdir(Pfad) if filterFkt(os.path.join(Pfad,f))]

print getDirList("c:\\",os.path.isfile)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Der Ansatz ist auch nicht schlecht, darauf wäre ich nicht gekommen...

Ich hab mich aber für zwei Funktionen entschieden:

Code: Alles auswählen

def getFileList( Path ):
    "Liste aller Dateien in Path"
    return [f for f in os.listdir(Path) if os.path.isfile(os.path.join(Path,f))]

def getDirList( Path ):
    "Liste aller Verzeichnisse in Path"
    return [f for f in os.listdir(Path) if os.path.isdir(os.path.join(Path,f))]
Ist natürlich mehr code, aber der Aufruf FileListe = getFileList( "C:\\" ) sagt mir mehr als FileListe = getDirList( "C:\\", os.path.isfile )
Natürlich hast du recht, das man bei deiner Variante flexibler ist, aber ich brauche nur Dateien und Verzeichnisse...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hab mich doch wieder Umentschieden :oops:

Ich wollte noch eine Abfrage einbauen, ob der Pfad überhaupt existiert. Das in den beiden Funktionen zu machen ist nun wirklich zuviel Redundanz :o

Also:

Code: Alles auswählen

def getDirList( Path, filterFkt ):
    if not os.path.isdir( Path ):
        return []
    else:
        return [f for f in os.listdir(Path) if filterFkt(os.path.join(Path,f))]
Antworten