Je suis nouveau sur Python. Je dois parcourir de nombreux dossiers et rechercher un fichier spécifique. Si ce fichier se trouve dans ce dossier, le nom du dossier sera ajouté à la fin d'une liste. Après cela, je veux que les noms du dossier soient triés naturellement. J'ai essayé natsorted(filename), du paquet natsort mais d'une manière ou d'une autre cela n'a pas trié la liste.

Mon code:

for dirName, subdirList, fileList in os.walk(folder):
if mat_file in fileList:
    input_path = dirName + r"\file.txt"
    if os.path.isfile(input_path):
        filename.append(str(dirName.strip(folder)))

natsorted(filename)
print filename

folder est le chemin d'accès aux dossiers

J'ai eu:

['1.1', '1.10', '1.2', '1.4', '1.6', '2.1', '2.10', '2.11', '2.12', '2.6']

Je voudrais:

['1.1', '1.2', '1.4', '1.6', '1.10', '2.1', '2.6', '2.10', '2.11', '2.12']

Y at-il une solution à ce problème?

0
kasdyk 8 mars 2016 à 11:12

3 réponses

Meilleure réponse

Parce que natsorted comme sorted ne mute pas la liste comme .sort(), vous devez attribuer la valeur de retour de natsorted(filename) à la variable filename comme:

filename = natsorted(filename)
5
Dan D. 8 mars 2016 à 08:18

Fractionnez chaque chaîne de version pour la comparer sous forme de liste d'entiers:

Filename.sort (key = lambda s: map (int, s.split ('.')))

0
BramV 8 mars 2016 à 08:19
def sort_key(x):
    a, b = x.split('.')
    return int(a), int(b)

sorted(filename, key=sort_key)
0
wong2 8 mars 2016 à 08:26