Реализовать консольную утилиту сортировки текстовых данных.
Предусмотреть:
- Интерфейс командной строки (CLI)
- Сортировку данных в форматах
csv
,txt
. - Для форматa
csv
необходимо указывать ключ сортировки, например, номер/наименование столбца вcsv
. - Сортировку по невозрастанию/неубыванию
- Сохранение результата в новый файл (без изменения исходных)
- Сортировку нескольких файлов одного формата
- Многопоточную сортировку (указывать количество потоков)
- Ограничение на размер блока (по памяти) при разбиении исходных данных
При реализации запрещается считывать файлы целиком.
- Естественное слияние
- Двухпутевое сбалансированное слияние
- N-путевое слияние
- Многофазная сортировка (Фибоначчиевая)
- Каскадное слияние
Реализуйте модуль external_sort.py
, где должна быть функция
my_sort
(название должно соответствовать используемому алгоритму)
с примерной сигнатурой:
PathType = Union[str, pathlib.Path]
my_sort(src: PathType, output: Optional[PathType]=None, reverse: bool=False,
key: Optional[Callable]=None, nflows: int=1,
bsize: Optional[int]=None) -> None
Описание аргументов:
src
: исходный файлoutput
: выходной файл, если не указан файлsrc
сортируется на местеreverse
: флаг определяющий вариант сортировки:
False
- по неубыванию
True
- по невозрастаниюkey
: функция, вычисляющая значение, на основе которого будет производится сортировка. Должна принимать один аргумент и возвращать значение.nflows
: количество потоковbsize
: размер блока, хранимого в памяти
Функция сортировки должна принимать абсолютный или относительный путь
до исходного файла в формате csv
или txt
.
Результатом работы функции сортировки должен стать либо новый файл, либо тот же файл с отсортированными записями.
Для работы с путями рекомендуется использовать pathlib
.
Оценка выставляется в соответствии со следующими требованиями:
- Общие требования:
- код работы проходит проверку утилитой
pylint
с конфигурационным файлом.pylintrc
. - код работы успешно проходит тесты, если таковые имеются.
- наличие документации к функциям, методам, классам и модулям.
- код работы проходит проверку утилитой
- На оценку 3 балла реализовать:
- все вышеперечисленное;
- пункты 1, 2 и 3.
- На оценку 4 балла дополнительно реализовать:
- все вышеперечисленное;
- пункты 4 и 5;
- На оценку 5 балла:
- реализовать все требования, указанные в описании к работе, кроме 7 и 8.
- Плюс в карму:
- все вышеперечисленное;
- пункты 7, 8;
- Алгоритмы внешней сортировки. Базовые понятия и алгоритмы
- Алгоритмы внешней сортировки. Естественная сортировка
- Алгоритмы внешней сортировки. Смешанные алгоритмы
- What are some real-life practical uses for external file sorting, and what future applications could it potentially be used for?
- Sorting Applications
- Каскадное слияние
- Сортировка естественным слиянием