OS… или все же Pathlib?
Начав поиск в интернете, мне попались два варианта, это модули os и Pathlib.
Первый попавшийся модуль был os. Данный модуль является очень популярным и давно используется для работы с папками и файлами ОС.
(Тестовые данные для проверки скриптов содержат три Excel-файла, каждый примерно по 45 тыс. строк.)
Реализация скрипта на модуле os.
Но на большом количестве файлов, около 600, скрипт работал крайне долго и было решено поискать какое-то другое решение данной задачи, с тем учетом, чтобы его можно было использовать и в будущем.
При повторном поиске был найден модуль Pathlib, о котором помимо весьма положительных отзывов, также отмечается удобство в работе, хоть он пока и не такой популярный как модуль os.
Не заставив себя долго ждать, я запустил скрипт с использованием модуля Pathlib:
Как видно на тестовых данных, разница во времени почти 30%. На рабочих данных разница была тоже очень заметна. Следовательно, результат работы был получен намного быстрее. Если сравнить визуально скрипты, то можно увидеть, что скрипт на Pathlib выглядит намного «легче».
Также стоит отметить, что при работе с os используется разделитель «\\» между директориями, в то время как в Pathlib используется «/»
Pathlib.
Вот как описывается в документации модуль.
«Если вы никогда раньше не использовали этот модуль или просто не уверены, какой класс подходит для вашей задачи, Path скорее всего это то, что вам нужно. Он создаст конкретный путь для платформы, на которой выполняется код.»
По описанию Pathlib работа с ним должна быть простой, особенно, если вы впервые сталкиваетесь с данным модулем.
Небольшое сопоставление различных os методов с их соответствующими эквивалентами Path:
Как видно, Pathlib содержит тот же набор методов, что и os, следовательно, в функциональном плане мы ничего не теряем, при работе с Pathlib вместо os.
Рассмотрю ряд основных методов Pathlib:
Получить текущий каталог. Это можно сделать используя Path.cwd():
Создать новую директорию. Path.mkdir():
Почти также можно создать и новый файл используя Path.touch():
Pathlib поддерживает свойство parent и различные связанные с этим свойством методы.
Можно создать несколько папок используя всё тот же метод Path.mkdir(), только нужно указать parents=True, в этом случае будут созданы папки, которых нет в пути. А используя Path.parent мы можем перемещаться по каталогам:
Но чтобы избежать многочисленный вызов метода parent можно воспользоваться Path.parents:
Здесь же можно использовать индексы для выбора необходимой папки:
Подводя небольшой итог использования модуля Pathlib:
- достаточно прост в использовании и понимании его работы,
- имеет много возможностей для работы с файлами,
- код смотрится лаконичнее,
- работает быстрее модуля os.
Более подробно можно ознакомится с документацией на официальном сайте
А каким модулем пользуетесь вы?
Давно юзаю этот модуль. С ним меньше геморроя)))
😁 согласны )