Работа с путями через 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"