стандартная библиотека· 3 мин

pathlib вместо os.path

После нескольких лет на os.path я почти полностью перешёл на pathlib. Главная причина — операции с путями читаются как обычный текст, а не как вложенные вызовы функций.

Было

import os
cfg = os.path.join(os.path.dirname(__file__), "config", "app.toml")
if os.path.exists(cfg):
    text = open(cfg).read()

Стало

from pathlib import Path
cfg = Path(__file__).parent / "config" / "app.toml"
if cfg.exists():
    text = cfg.read_text()

Оператор / для склейки путей поначалу выглядит непривычно, но через день становится естественным. Особенно приятны методы вроде read_text(), write_text(), glob() и rglob() — они закрывают большинство повседневных задач без импорта дополнительных модулей.

Где os.path всё ещё уместен

В горячих циклах, где создаются миллионы путей, объекты Path чуть дороже строк. Но это редкий случай — почти всегда читабельность важнее.

← ко всем заметкам