2010-08-26 5 views
0

J'ai un certain nombre de répertoires contenant les fichiers similaires à l'exemple ci-dessous:Tri personnalisé du contenu du répertoire

test 
setup 
adder 
hello 
_CONFIG 
TEST2 

Le fichier (s) dans ces répertoires avec le préfixe _ représentent les fichiers de configuration d'importance. L'objectif était d'avoir ces fichiers apparaissent d'abord lorsque j'ai énuméré le répertoire, par exemple, je voudrais être pourvu:

_CONFIG 
TEST2 
adder 
hello 
setup 
test 

Cependant, j'utilise

for element in sorted(os.listdir(path)): 
    print(element) 

et cela fournit une liste où les fichiers à partir en majuscules sont listés ci-dessus les fichiers préfixés _:

TEST2 
_CONFIG 
adder 
hello 
setup 
test 

y at-il de toute façon autour de cela sans filtrer chaque fichier par son premier caractère et l'impression que ce séparement semblerait être exagéré.

Merci

Tom

Répondre

2
sorted(..., key = lambda s: (not s.startswith("_"), s)) 
+0

C'est génial, merci! Fournit exactement ce dont j'ai besoin. – Thorsley

0
for element in sorted(os.listdir(path), key=lambda x:x.replace('_', ' ')): 
    print(element) 
+0

Hacky: repose sur la liste ne contenant pas toutes les chaînes commençant par "". Ce n'est pas garanti, du moins pas sur Windows. – katrielalex

+0

key = lambda x: x.replace ('_', '\ x00') devrait prendre soin de ce problème ... – Steven

+1

@katrielalex: Pas du tout, ça fait juste _ équivalent à l'espace pendant le tri, ce qui a du sens pour moi. –

Questions connexes