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



@Termoslik

Вход данные это список имён всегда формата «file675.txt» их много. При попытке отсортировать, конечно получается что-то вида:
file1.txt
file100.txt
file2.txt
Как это исправить и как вообще можно распарсить имена и отсортировать именно список правильно для дальнейшего вывода?


Решения вопроса 0


Ответы на вопрос 3



@MinTnt Куратор тега Python

a = ['file1.txt', 'file10.txt', 'file2.txt']
print(sorted(a, key=lambda x: int(x[4:-4])))

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

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



@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']

Если нужны будут пояснения к коду — пишите



@Stalker_RED

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *