Полезные модули
Часть задач в любом проекте решается без единой внешней библиотеки - работа с путями, датами,
текстом по шаблону и настройками уже есть в стандартной библиотеке Python
Эта статья - про пять модулей, которые пригодятся почти в любом проекте: pathlib, os, re,
datetime и python-dotenv
Теория
pathlib - пути как объекты, а не строки
Старый способ работать с путями - собирать строки руками через os.path.join
pathlib заменяет строку на объект Path, у которого склейка путей - это оператор /:
from pathlib import Path
logs_dir = Path("logs")
first_log = logs_dir / "app.log"
print(first_log) # logs/app.log
print(first_log.exists()) # True, если файл правда есть
print(first_log.name) # app.log
print(first_log.suffix) # .log
print(first_log.parent) # logs
Самое полезное для повседневных задач:
.exists()/.is_file()/.is_dir()- проверки, не поднимающие исключение, если пути нет.read_text()/.write_text()- открыть, прочитать/записать и закрыть файл одной строкой, без ручногоwith open(...).glob("*.log")/.rglob("*.log")- найти файлы по шаблону,rglobещё и рекурсивно по вложенным папкам.mkdir(parents=True, exist_ok=True)- создать папку вместе с промежуточными родителями, не упав, если она уже есть
В этом курсе ruff включает PTH (flake8-use-pathlib) - он ловит именно связку "старый
os.path там, где место pathlib", например PTH118 на os.path.join(...)
Это не запрет на os целиком - смотри следующий раздел
os - когда всё-таки нужен
pathlib не отменяет os
Пути - лишь часть того, что делает os, и заменять им имеет смысл только это:
- переменные окружения читаются через
os.environ/os.getenv, уpathlibдля этого нет аналога os.cpu_count(),os.getpid()и прочее взаимодействие с процессом и ОСpathlibтоже не покрывает
Так что практическое правило простое: если результат - путь к файлу или папке, нужен
pathlib
Если нужно прочитать настройку окружения или спросить что-то у ОС напрямую - нужен os