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 см. ваше кодовое имя, которое вы собираетесь запустить, если это неправильно,...... удалите это ненужное кодовое имя.... а затем запустить его с правильными аргументами