2017-12-06 2 views
0

Ich versuche, Dateien und Verzeichnisse auf bestimmte Weise zu sortieren (für mich ist es normalerweise aber ok). So habe ich JPG-Dateien, dann einige TXT-Dateien oder wav und ich habe einige Verzeichnisse ich es wie zuerst sortiert nach Namen sortiert werden sollen alle Dateien dann Verzeichnisse sortieren, aber wenn ich versuche, so etwas wie zu tun:Dateien sortieren dann Verzeichnisse os.listdir PYTHON

path = "/my_path" 
    arr = os.listdir(path) 
    arr.sort(key=lambda x: (os.path.isdir(x), x)) 
    print(arr) 

-Code gibt mir Ausgabe:

['10000100.JPG', '10000101.JPG', '10000102.JPG', '10000103.JPG', '10000104.BMP', 'BACKUP.BIN', 'DEPOSIT.BIN' 'HRYS', 'WAVS', 'k.txt', 's.wav']

aber es sollte sein:

[ '10000100.JPG', '10000101.JPG', ‚100001 02.JPG ',' 10000103.JPG ',' 10000104.BMP ',' BACKUP.BIN ',' DEPOSIT.BIN ',' k.txt ',' s.wav ',' HRYS ',' WAVS ']

Wie wird es richtig gemacht?

+0

können Sie 'print ([(os.path.isdir (x), x) für x in arr])' ' –

+0

[(False, '10000100.JPG'), (False‚10000101. JPG '), (Falsch,' 10000102.JPG '), (Falsch,' 10000103.JPG '), (Falsch,' 10000104.BMP '), (Falsch,' BACKUP.BIN '), (Falsch,' EINZAHLEN. BIN '), (Falsch,' HRYS '), (Falsch,' WAVS '), (Falsch,' k.txt '), (Falsch,' s.wav ')] ' – BengBeng

+0

Nun, es scheint, dass'' HRYS'' und 'WAVS' sind * keine Verzeichnisse *. –

Antwort

3

Nun, die einfachste Art und Weise ist eine geeignete key zu schaffen, so können Sie verwenden:

arr.sort(key=lambda x: (os.path.isdir(x), x)) 

Der Schlüssel ist ein Tupel, das erste Element ist os.path.isdir(x), die eine bool zurückgibt.

EDIT: Also, sicher das funktioniert zu machen, tun:

def isdir(path, x): 
    path = os.path.join(path, x) 
    return os.path.isdir(path) 

arr.sort(key=lambda x: (isdir(path, x), x)) 

Obwohl, könnte es einfacher sein os.scandir zu verwenden, die DirEntry Objekte nützlicher zurückgibt.

arr = sorted(os.scandir(), key=lambda x: (x.is_dir(), x.name)) 
+1

Ich benutze diese Zeile, aber ich bekomme die gleiche Ausgabe wie zuvor – BengBeng

+0

@BengBeng können Sie Ihre tatsächliche Ausgabe und den genauen Code, den Sie verwenden? –

+0

Ich aktualisierte Frage :) – BengBeng

Verwandte Themen