how - python read if file exists




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

Вам нужно указать абсолютный путь, где находится файл.

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

Это код:

file1 = open('recentlyUpdated.yaml')

И ошибка:

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

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

Это распространенное заблуждение относительно того, что относительные пути относятся к расположению сценария 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 . Дважды проверьте расширение своего файла.


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

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


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




file-not-found