Python Glossary English

Python 3.4+Файлы и I/Oпонятие

pathlib.Path

pathlib

Объектно-ориентированный API для работы с путями файловой системы. Кроссплатформенный.

Синтаксис

from pathlib import Path
p = Path('/some/path')

Конструктор ничего не читает с диска: объект спокойно создаётся и для несуществующего пути, существование проверяют отдельно через exists() или is_file(). При склейке компонентов абсолютный кусок отбрасывает всё, что было слева, — типичная ловушка, когда второй компонент приходит из пользовательского ввода. Собирайте пути оператором / вместо конкатенации строк: разделитель подставится под текущую ОС, а на Windows прямые слэши во входной строке всё равно будут поняты.

Примеры

from pathlib import Path
# Пример работает во временной папке: '/tmp' есть не на всякой системе,
# а tempfile.mkdtemp() даёт её кроссплатформенно.
import os, tempfile
base = Path(tempfile.mkdtemp())
os.chdir(base)
print(base.exists(), base.is_dir(), base.is_file())  # → True True False
# Сборка пути оператором /
f = base / 'test' / 'file.txt'
print(f.name, f.stem, f.suffix)  # → file.txt file .txt
print(f.parent.name)  # → test
# Чтение и запись — без open() и without with
note = base / 'note.txt'
note.write_text('Hello from pathlib!', encoding='utf-8')
print(note.read_text(encoding='utf-8'))  # → Hello from pathlib!
# mkdir
new_dir = base / 'new_dir'
new_dir.mkdir(exist_ok=True)
print(new_dir.exists())  # → True
# glob — поиск по маске
(base / 'a.txt').write_text('a', encoding='utf-8')
(base / 'b.log').write_text('b', encoding='utf-8')
print(sorted(p.name for p in base.glob('*.txt')))  # → ['a.txt', 'note.txt']
# iterdir — обход содержимого папки
print(sorted(p.name for p in base.iterdir()))  # → ['a.txt', 'b.log', 'new_dir', 'note.txt']
# stat и размер
print(note.stat().st_size)  # → 19

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности