Сортировка по названию в Python

Сортировка по названию в Python

Сортировка по названию в Python

Сортировка по названию в Python легко реализуется при помощи функции natsorted() модуля natsort. Особенность работы функции natsorted() состоит в том, что она умеет корректно сортировать численно-буквенные названия. Рассмотрим работу этой функции в действии на практическом примере!

Входные данные

Дано: папка под названием «photos», в которой расположены файлы с фотографиями собак. Названия файлов включают в себя различные символы (цифры, буквы, скобки), а также могут быть разного разрешения(.jpg, .jgeg):

Сортировка по названию в Python

Что нужно сделать?

Нужно: прочитать названия файлов, сформировать из этих названий список, а затем упорядочить элементы списка в алфавитном порядке, то есть осуществить сортировку по названию в Python. Итоговый список с названиями должен иметь вид:

['1(0).jpg', '1.jpg', '2(0).jpg', '2(1).jpeg', '2(1).jpg', '2sleeping.jpg', '3 small_dog.jpg', '3.jpg', '10(0).jpg', 'Buldog.jpg', 'black_dog.jpg']

Решение задачи:

1. Импортируем необходимые модули:
  • модуль os нам понадобится для считывания названий файлов из директории;
  • из модуля natsort мы будем вызывать функцию natsorted() для сортировки списка с названиями файлов:
import os
import natsort

Если у вас не установлен модуль natsort, это легко исправить с помощью команды:

pip install natsort или pip3 install natsort, в зависимости от версии Python

2. Считываем названия файлов из директории photos в список filenames.

Для этого определим путь к директории с файлами, а после — прочитаем названия с помощью функции listdir() модуля os:

import os
import natsort

# определяем путь к директории с файлами
filepath = 'photos'
# считываем названия файлов в список filenames
filenames = os.listdir(filepath)
# Выведем на экран неотсортированный спиcок
print(filenames)

Результат работы кода:

неотсортиванный спиок:  ['2(1).jpg', '2(0).jpg', '1(0).jpg', '3.jpg', '3 small_dog.jpg', 'Buldog.jpg', 'black_dog.jpg', '2sleeping.jpg', '1.jpg', '2(1).jpeg', '10(0).jpg']

Как видно из полученного результата, на данный момент список filenames состоит из неупорядоченных элементов.

3. Упорядочим список filenames.

Для этого достаточно вызвать функцию natsorted() модуля natsort. В качестве аргумента передадим функции natsorted() наш список filenames:

import os
import natsort
filepath = 'photos'
filenames = os.listdir(filepath)
print(filenames)

#осуществляем сортировку по названиям файлов
sorted_filenames = natsort.natsorted(filenames)

#Выведем на экран отсортированный список
print(sorted_filenames) 

Результат работы кода:

отсортированный список:  ['1(0).jpg', '1.jpg', '2(0).jpg', '2(1).jpeg', '2(1).jpg', '2sleeping.jpg', '3 small_dog.jpg', '3.jpg', '10(0).jpg', 'Buldog.jpg', 'black_dog.jpg']

Как видно из выведенного на экран результата, список успешно отсортирован. Соблюдена сортировка по числовым значениям и учтен алфавитный порядок букв!

Итоговый код можно посмотреть ниже:

# модуль os нам понадобится для считывания названий файлов из директории
import os
# модуль для сортировки списка
import natsort

# определяем путь к директории с файлами
filepath = 'photos'
# считываем названия файлов в список filenames
filenames = os.listdir(filepath)
print('неотсортиванный спиок: ',filenames)

# oсуществляем сортировку по названиям файлов
sorted_filenames = natsort.natsorted(filenames)
print('отсортированный список: ', sorted_filenames)

Результат работы итогового кода:

неотсортиванный спиок:  ['2(1).jpg', '2(0).jpg', '1(0).jpg', '3.jpg', '3 small_dog.jpg', 'Buldog.jpg', 'black_dog.jpg', '2sleeping.jpg', '1.jpg', '2(1).jpeg', '10(0).jpg']
отсортированный список:  ['1(0).jpg', '1.jpg', '2(0).jpg', '2(1).jpeg', '2(1).jpg', '2sleeping.jpg', '3 small_dog.jpg', '3.jpg', '10(0).jpg', 'Buldog.jpg', 'black_dog.jpg'

			

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

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