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Сообщить о неточности