Глава 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/ — пустой проект.
project/ (после)
data/
users/
После Path("data/users").mkdir(parents=True, exist_ok=True): обе папки созданы за один вызов.
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, без установки
Открыть практику →