Python open() дает IOError: Errno 2 Нет такого файла или каталога

По какой-то причине у моего кода возникают проблемы при открытии простого файла:

Это код:

file1 = open('recentlyUpdated.yaml')

И ошибка:

IOError: [Errno 2] No such file or directory: 'recentlyUpdated.yaml'
  • Естественно, я проверил, что это правильное имя файла.
  • Я попытался передвигаться по файлу, давая open() полный путь к файлу, и, похоже, ничего из этого не работает.

Ответ 1

  • Убедитесь, что файл существует: используйте os.listdir(), чтобы увидеть список файлов в текущем рабочем каталоге
  • Убедитесь, что вы находитесь в каталоге, в котором, как вы думаете, вы находитесь с os.getcwd() (если вы запускаете свой код из IDE, возможно, вы находитесь в другом каталоге)
  • Вы можете затем либо:
    • Вызовите os.chdir(dir), dir - папку, в которой находится файл. затем откройте файл, указав только его имя.
    • Укажите абсолютный путь к файлу в вашем вызове open.
  • Не забудьте использовать необработанную строку, если ваш путь использует обратную косую черту, например итак: dir = r'C:\Python32'
    • Если вы не используете raw-string, вы должны экранировать каждую обратную косую черту: 'C:\\User\\Bob\\...'
    • Прямая косая черта также работает в Windows 'C:/Python32' и не требует экранирования.

Позвольте мне пояснить, как Python находит файлы:

  • Абсолютный путь - это путь, который начинается с корневого каталога вашего компьютера, например, C:\Python\scripts.., если вы работаете в Windows.
  • Относительный путь - это путь, который начинается не с корневого каталога вашего компьютера, а вместо этого относится к тому, что называется working directory. Вы можете просмотреть текущий рабочий каталог Python, вызвав os.getcwd().

Если вы попытаетесь сделать open('sortedLists.yaml'), Python увидит, что вы передаете ему относительный путь, поэтому он будет искать файл в текущем рабочем каталоге. Вызов os.chdir изменит текущий рабочий каталог.

Пример: допустим, что file.txt находится в C:\Folder.

Чтобы открыть его, вы можете сделать:

os.chdir(r'C:\Folder')
open('file.txt') #relative path, looks inside the current working directory

или

open(r'C:\Folder\file.txt') #full path

Ответ 2

Файл может существовать, но может иметь другой путь. Попробуйте написать абсолютный путь к файлу.

Попробуйте функцию os.listdir(), чтобы проверить, что хотя бы python видит файл.

Попробуйте это так:

file1 = open(r'Drive:\Dir\recentlyUpdated.yaml')

Ответ 3

Скорее всего, проблема в том, что вы используете относительный путь к файлу, чтобы открыть файл, но текущий рабочий каталог не настроен так, как вы думаете.

Это распространенное заблуждение, что относительные пути относительно местоположения скрипта Python, но это не так. Относительные пути к файлам всегда относятся к текущему рабочему каталогу, и текущим рабочим каталогом не обязательно должно быть местоположение вашего скрипта Python.

У вас есть три варианта:

  • Используйте абсолютный путь, чтобы открыть файл:

    file = open(r'C:\path\to\your\file.yaml')
    
  • Сгенерируйте путь к файлу относительно вашего скрипта Python:

    from pathlib import Path
    
    script_location = Path(__file__).absolute().parent
    file_location = script_location / 'file.yaml'
    file = file_location.open()
    

    (см. также: Как узнать путь и имя файла, который в данный момент выполняется?)

  • Перед открытием файла измените текущий рабочий каталог:

    import os
    
    os.chdir(r'C:\path\to\your\file')
    file = open('file.yaml')
    

Другие распространенные ошибки, которые могут вызвать ошибку "файл не найден":

  • Случайно используя escape-последовательности в пути к файлу:

    path = 'C:\Users\newton\file.yaml'
    # Incorrect! The '\n' in 'Users\newton' is a line break character!
    

    Чтобы избежать этой ошибки, не забывайте использовать необработанные строковые литералы для путей к файлам:

    path = r'C:\Users\newton\file.yaml'
    # Correct!
    

    (см. также: путь Windows в Python)

  • Забыть, что Windows не отображает расширения файлов:

    Поскольку Windows не отображает известные расширения файлов, иногда, когда вы думаете, что ваш файл называется file.yaml, он фактически называется file.yaml.yaml. Дважды проверьте расширение вашего файла.

Ответ 4

Возможно, вы закрыли "file1".
Просто используйте флаг 'w', чтобы создать новый файл:

file1 = open('recentlyUpdated.yaml', 'w')

mode - это необязательная строка, которая определяет режим, в котором файл открыт. По умолчанию используется значение "r", что означает "открыт для чтения в тексте". Режим. Другими общими значениями являются w для записи (усечение файла, если он уже существует)...

(см. также https://docs.python.org/3/library/functions.html?highlight=open#open)

Ответ 5

необходимо изменить конфигурацию запуска

изменить... >>> перейти к запуску конфигурации... перейдите к >>> Python run см. ваше кодовое имя, которое вы собираетесь запустить, если это неправильно,...... удалите это ненужное кодовое имя.... а затем запустить его с правильными аргументами