Работа с путями через pathlib

Работа с путями в Python через pathlib.Path: создание, объединение, проверка существования, glob и чтение файлов.

pathlib.Path — объектно-ориентированный способ работы с путями файловой системы. Он заменяет конкатенацию строк и функции из os.path, делая код чище и кросс-платформенным.

Создание пути и основные свойства

from pathlib import Path

p = Path("documents/report.txt")

print(p.name)      # report.txt
print(p.stem)      # report
print(p.suffix)    # .txt
print(p.parent)    # documents

Вывод:

report.txt
report
.txt
documents

Объединение путей оператором /

Самая удобная черта Path — оператор / для склейки частей пути без ручных разделителей:

from pathlib import Path

base = Path("data")
subdir = base / "2024" / "january"
file_path = subdir / "sales.csv"

print(file_path)           # data/2024/january/sales.csv
print(file_path.parts)     # ('data', '2024', 'january', 'sales.csv')

Вывод:

data/2024/january/sales.csv
('data', '2024', 'january', 'sales.csv')

Проверка существования и создание директорий

from pathlib import Path

p = Path("output/logs")
p.mkdir(parents=True, exist_ok=True)   # создаст всю цепочку папок

print(p.exists())     # True
print(p.is_dir())     # True
print(p.is_file())    # False

Вывод:

True
True
False

Чтение и запись через Path

Path имеет собственные методы read_text() и write_text() — они открывают и закрывают файл автоматически:

from pathlib import Path

p = Path("note.txt")
p.write_text("Привет из pathlib!\n", encoding="utf-8")

content = p.read_text(encoding="utf-8")
print(content)
print("Размер:", p.stat().st_size, "байт")

Вывод:

Привет из pathlib!

Размер: 35 байт

Поиск файлов с glob

from pathlib import Path

# Создадим несколько файлов для примера
base = Path("test_dir")
base.mkdir(exist_ok=True)
(base / "a.txt").write_text("A")
(base / "b.txt").write_text("B")
(base / "c.py").write_text("# py")

# Найдём все .txt файлы
for f in base.glob("*.txt"):
    print(f.name, "—", f.read_text())

Вывод:

a.txt — A
b.txt — B

Для рекурсивного поиска (включая подпапки) используйте rglob("*.txt"). В отличие от glob.glob() из стандартного модуля, результат — список объектов Path, а не строк.

Коротко

  • Path из модуля pathlib — объектный способ работы с путями.
  • Склеивайте части пути оператором /: base / "dir" / "file.txt".
  • Свойства: name, stem, suffix, parent.
  • Методы: exists(), is_file(), is_dir(), mkdir(), read_text(), write_text(), glob().
Проверьте себя
1. Каким оператором в pathlib склеивают части пути?
A+
B//
C/
D.
2. Какой метод Path создаёт директорию, включая все промежуточные папки?
Amakedirs()
Bmkdir(parents=True)
Ccreate()
Dmakedir()
3. Что вернёт свойство Path("docs/guide.md").stem?
A"docs/guide.md"
B"guide.md"
C"guide"
D".md"
Поддержать проект