Seite 1 von 1
Dateiliste oder Verzeichnisliste...
Verfasst: Mittwoch 9. Februar 2005, 11:06
von jens
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)
Re: Dateiliste oder Verzeichnisliste...
Verfasst: Mittwoch 9. Februar 2005, 12:35
von 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))]
Verfasst: Mittwoch 9. Februar 2005, 12:39
von jens
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...
Verfasst: Mittwoch 9. Februar 2005, 13:07
von 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)
Verfasst: Mittwoch 9. Februar 2005, 14:02
von jens
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...
Verfasst: Mittwoch 9. Februar 2005, 15:14
von jens
Hab mich doch wieder Umentschieden
Ich wollte noch eine Abfrage einbauen, ob der Pfad überhaupt existiert. Das in den beiden Funktionen zu machen ist nun wirklich zuviel Redundanz
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))]