Hallo,
ich habe mit fnmatch eine Auflistung der Dateien in diversen Verzeichnissen erstellt.
Diese ist zuerst nach Verzeichnis und dann nach den enthaltenen Dateien sortiert.
Ich will, daß die Liste nur nach den Dateien geordnet ist. Da die Pfadnamen immer die gleiche Länge haben, könnte man sagen: Beginne den Vergleich nicht am ersten Char des Listeneintrages sondern am nten. Habe das im Moment so gelöst, daß ich die Dateinamen (alle gleichlang und eindeutig) als Präfix vor die Listeneinträge gesetzt habe und dann sortiert habe, danach habe ich die Präfixe wieder gelöscht.
Geht das auch eleganter?
Sortieren einer Liste: Vergleich ab bestimmter Position
Listen bieten eine sort-Methode. Die sort-Methode bietet die Möglichkeit einen key für das Sortieren anzugeben. Jetzt brauchen wir für den key nur noch noch eine Funktion, die den Pfad passend zerlegt und finden sie in os.path.split. Von deren Ergebnis nehmen wir jetzt noch das letzte Element ([-1]).portnoy hat geschrieben:Geht das auch eleganter?
Code: Alles auswählen
>>> import os
>>> filenames = [
'/home/matthias/whatsthis.txt',
'/etc/apache2/listen.conf',
'/usr/lib/dconf-service'
]
>>> filenames.sort(key=lambda x: os.path.split(x)[-1])
>>> print(filenames)
['/usr/lib/dconf-service', '/etc/apache2/listen.conf', '/home/matthias/whatsthis.txt']
@/me: statt os.path.split sei hier os.path.basename erwähnt, dann kann man sich auch das lambda sparen:
Code: Alles auswählen
filenames.sort(key=os.path.basename)