Python LinuxWindowsmacOS

Python: FileNotFoundError: No such file or directory

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Файл не найден из-за неверного пути или текущего каталога. Используйте pathlib и абсолютные пути.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Диагностика пути
  5. Надёжный путь
  6. Запись и создание каталогов
  7. Особенности Windows, IDE и запуска по расписанию

#Что означает ошибка

Сообщение
FileNotFoundError

FileNotFoundError: [Errno 2] No such file or directory в Python означает, что файл или каталог по указанному пути не найден. Чаще всего дело в относительном пути: он считается от текущей рабочей директории, а не от расположения скрипта.

Другие причины — опечатка, неверный слэш, отсутствие каталога при записи.

Файл не найден из-за неверного пути или текущего каталога. Используйте pathlib и абсолютные пути.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Неверный путьСтрока.Имя файла ошибочно или отличается регистромСравните реальный путь и имя в файловом менеджере.
Другой cwdКаталог.Скрипт запущен из другого текущего каталогаУзнайте os.getcwd() или стройте путь от __file__, если подходит.
Слеши WindowsЭкранирование.В Windows обратная косая черта прочитана как управляющий символИспользуйте pathlib или корректно экранируйте путь.
Файл не созданОжидание.Файл ещё не создан либо диск отключёнНайдите исходный файл или восстановите носитель, не создавайте пустую замену.

#Пошаговое решение

  1. Выведите текущую папкуВ сообщении FileNotFoundError найдите часть [Errno 2] ...: '...' — это путь, который программа пыталась открыть. В терминале проекта выполните python -c "import os; print(os.getcwd())" (или python3 в Linux/macOS, если так запускаете проект). Текущий каталог выполнения не всегда совпадает с местом расположения файла .py; в редакторе и при запуске службы он может отличаться. Запишите полный путь из исключения и текущий каталог.
  2. Проверьте существование файлаВ исходном скрипте перед open(...) временно добавьте from pathlib import Path; print(Path(path).resolve(), Path(path).exists()), где path — ваша переменная с именем файла. False означает, что файла по рассчитанному пути нет; True при ошибке может означать, что проверяется не тот путь или файл исчезает между операциями. Если это сетевой или подключаемый диск, проверьте его доступность. Не создавайте пустой файл вместо отсутствующего пользовательского документа.
  3. Используйте pathlibЕсли файл должен лежать рядом со скриптом, в коде используйте from pathlib import Path; BASE_DIR = Path(__file__).resolve().parent; file_path = BASE_DIR / 'data' / 'settings.json'. Эта запись вычисляет путь от файла Python независимо от каталога запуска (но в интерактивном Jupyter __file__ нет — там нужен иной способ). Проверьте print(file_path) и существование файла. Если файл задаётся аргументом пользователя, наоборот, не подменяйте его путь расположением скрипта.
  4. Создайте нужные каталогиЕсли программа создаёт новый файл, сначала определите допустимый каталог и создайте только папку назначения: file_path.parent.mkdir(parents=True, exist_ok=True); затем выполняйте запись через with file_path.open('w', encoding='utf-8') as f:. Эта команда изменяет файловую систему, поэтому предварительно проверьте file_path, чтобы не создать каталоги в неожиданном месте; для чтения существующего файла mkdir проблему не решает. При ошибке PermissionError нужен отдельный разбор прав.
  5. Проверьте имя и расширениеВ Проводнике Windows откройте «Вид» → «Показать» → «Расширения имён файлов» (Windows 11; в Windows 10 это флажок на вкладке «Вид»), чтобы увидеть file.txt.txt и другие скрытые окончания. В Linux/macOS выполните ls -la в ожидаемой папке; регистр букв там обычно важен. Проверьте имя, расширение и кодировку в строковом литерале пути, исправьте опечатку в программе и повторите чтение. Если файл действительно отсутствует, восстановите его из проверенного источника.

#Диагностика пути

Перед открытием файла выведите путь и текущую папку: import os; print(os.getcwd()); print(os.path.abspath("data.txt")); print(os.path.exists("data.txt")). Если exists — False, путь неверный. Запускайте скрипт из нужного каталога или используйте путь относительно файла скрипта.

#Надёжный путь

Используйте pathlib: from pathlib import Path; BASE = Path(__file__).resolve().parent; f = BASE / "data" / "input.txt"; text = f.read_text(encoding="utf-8"). Так скрипт находит файлы независимо от того, откуда запущен. Для Windows используйте сырые строки r"C:\папка\файл.txt" или прямые слэши.

#Запись и создание каталогов

При записи в несуществующую папку получите ту же ошибку. Создайте её: Path("out").mkdir(parents=True, exist_ok=True). Проверьте расширения (скрытые расширения в Windows: file.txt.txt), регистр имени в Linux, пробелы в конце имени и права доступа. Для PyInstaller и IDE проверьте рабочую папку запуска (PyCharm: Run → Edit Configurations → Working directory).

PythonКоманда
Диагностика пути: пример кода, а не команда для вставки в терминал. Для отсутствующего исходного файла не создавать пустые папки или файлы.
from pathlib import Path
BASE = Path(__file__).resolve().parent # доступно внутри .py, но не всегда в Jupyter
f = BASE / 'data' / 'input.txt'
print(f, f.exists())

#Особенности Windows, IDE и запуска по расписанию

При запуске скрипта двойным щелчком, из планировщика задач или службы текущей папкой оказывается C:\Windows\System32, а не папка скрипта, поэтому относительные пути ломаются. Решение — путь от __file__ или os.chdir(os.path.dirname(os.path.abspath(__file__))) в начале скрипта. В Jupyter Notebook рабочая папка совпадает с расположением блокнота; проверьте %pwd. В Docker путь внутри контейнера отличается от путей хоста: смонтируйте том -v $(pwd)/data:/app/data.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.