Глава 15 · Python и файлы
Папки: exists(), is_file(), mkdir()
Прежде чем работать с путём, часто нужно понять, что перед нами — и создать недостающие папки.
Проверяем, что перед нами
exists_is_file_is_dir.py
from pathlib import Path
p = Path("data")
print(p.exists()) # существует ли путь вообще
print(p.is_file()) # это обычный файл?
print(p.is_dir()) # это папка?
Три исхода проверки пути
exists() → False
→
путь не существует
exists() → True, is_file() → True
→
обычный файл
exists() → True, is_dir() → True
→
папка
exists() — это не гарантия на будущее
Между проверкой
if path.exists(): и следующей операцией файловая система может измениться — файл может быть удалён другим процессом, права доступа могут отличаться. Проверка существования полезна для логики программы, но не доказывает, что следующая операция обязательно пройдёт без ошибок (вернёмся к этому в разделе 15.22).Создание папок
mkdir_prostoj.py
from pathlib import Path
Path("data").mkdir()
mkdir_nadezhny.py
from pathlib import Path
Path("data/users").mkdir(parents=True, exist_ok=True)
# parents=True — создать все промежуточные папки, если их ещё нет
# exist_ok=True — не считать ошибкой, если папка уже существует
project/ (до)
project/ (после)
data/
users/
Debug Lab 10: Запись в несуществующую папку
propushena_papka.py
from pathlib import Path
path = Path("data/users/anna.json")
path.write_text("{}", encoding="utf-8") # папки data/users ещё нет!
Traceback (most recent call last):
FileNotFoundError: [Errno 2] No such file or directory: 'data/users/anna.json'
Файл можно создать только внутри папки, которая уже существует. write_text()/open(..., "w") создают файл, но не создают недостающие родительские папки автоматически.
Исправленный код
papka_zagotovlena.py
from pathlib import Path
path = Path("data/users/anna.json")
path.parent.mkdir(parents=True, exist_ok=True) # сначала — папки
path.write_text("{}", encoding="utf-8") # потом — файл
Практика: exists(), is_file(), mkdir()
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки