Как изменить сортировку списка по имени?

Рейтинг: 0Ответов: 1Опубликовано: 03.06.2023

Мой код

import os
path = os.path.dirname(os.path.abspath(__file__))
lst = os.listdir(path2)
lst.sort()


for filename in lst:
     print(filename)

Я пытаюсь получить список всех картинок по имени но вместо

0 (1).png 0 (2).png 0 (3).png 0 (4).png 0 (5).png
Я получаю
0 (1).png 0 (10).png 0 (100).png 0 (101).png 0 (102).png
Я не понимаю почему так происходит и как это исправить.

Ответы

▲ 0Принят

Если вы хотите, чтобы имена файлов сравнивались как числа, а не строки, то нужно об этом сказать python-у. Например, так:

lst.sort(key=lambda x: int(x.split('.')[0]))

Но если будет хоть одно имя, которое числом не является - программа упадет.


UPD: Вот так по идее работать будет

def my_key(name):
    i = name[:name.index(' ')]
    j = name[name.index('(')+1:name.index(')')]
    return (int(i), int(j))

# ...
lst.sort(key=my_key)