Как распарсить и отсортировать имена файлов?

Вход данные это список имён всегда формата "file675.txt" их много. При попытке отсортировать, конечно получается что-то вида:
file1.txt
file100.txt
file2.txt
Как это исправить и как вообще можно распарсить имена и отсортировать именно список правильно для дальнейшего вывода?
  • Вопрос задан
  • 280 просмотров
Решения вопроса 1
MinTnt
@MinTnt
Любитель однострочников (Версия 1.106)
a = ['file1.txt', 'file10.txt', 'file2.txt']
print(sorted(a, key=lambda x: int(x[4:-4])))

Пояснение по коду. sorted() для строк - сортирует их по алфавиту. Т.е., как оно сортирует АБ АВ БА, так само и для цифр в строке, сначала то что начинается на 1, потом то что на 2 и тд.

Так что для правильной сортировки, подаваемое число-строку нужно из формата строки переводить в число. А там как мы знаем стандартный вид строк, то просто пользуемся срезом [4:-4]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@twistfire92
нужно для каждого имени сделать некое соответствие числом, которое в нем заложено.

Создать список этих соответствий и упорядочить по числу.
Если быстро накидать, то что-то вроде этого выйдет:

names = ['file1.txt',
'file100.txt',
'file2.txt']

new_list = []

for name in names:
	number = int(name.replace('file', '').replace('.txt', ''))
	new_list.append((name, number))

sorted_files = [element[0] for element in sorted(new_list, key=lambda x: x[1])]

print(sorted_files) # ['file1.txt', 'file2.txt', 'file100.txt']


Если нужны будут пояснения к коду - пишите
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы