Питон не видит файл

Обновлено: 04.07.2024

Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.

Файлы Python

Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).

В Python существует два типа файлов:

Текстовые файлы

Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.

Текст может храниться в двух форматах: ( .txt ) — простой текст и ( .rtf ) — «формат обогащенного текста».

Бинарные файлы

В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.

Они хранятся в формате .bin .

Любую операцию с файлом можно разбить на три крупных этапа:

  1. Открытие файла
  2. Выполнение операции (запись, чтение)
  3. Закрытие файла

Открытие файла

Метод open()

В Python есть встроенная функция open() . С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.

  • file_name = имя открываемого файла
  • access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения ( r ), если другое не указано. Далее полный список режимов открытия файла

Пример

Создадим текстовый файл example.txt и сохраним его в рабочей директории.

Текстовый файл пример

Следующий код используется для его открытия.

В этом примере f — переменная-указатель на файл example.txt .

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

Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252 , а в Linux — utf-08 .

Закрытие файла

Метод close()

После открытия файла в Python его нужно закрыть. Таким образом освобождаются ресурсы и убирается мусор. Python автоматически закрывает файл, когда объект присваивается другому файлу.

Существуют следующие способы:

Способ №1

Проще всего после открытия файла закрыть его, используя метод close() .

После закрытия этот файл нельзя будет использовать до тех пор, пока заново его не открыть.

Способ №2

Также можно написать try/finally , которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.

Без него программа завершается некорректно.

Вот как сделать это исключение:

Файл нужно открыть до инструкции try , потому что если инструкция open сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.

Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.

Способ №3

Инструкция with

Еще один подход — использовать инструкцию with , которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.

В таком случае инструкция close не нужна, потому что with автоматически закроет файл.

Вот как это реализовать в коде.

Чтение и запись файлов в Python

В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.

Функция read()

Функция read() используется для чтения содержимого файла после открытия его в режиме чтения ( r ).

Синтаксис

  • file = объект файла
  • size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.

Пример

Функция readline()

Функция readline() используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.

Пример

Создадим файл test.txt с нескольким строками:

Посмотрим, как функция readline() работает в test.txt .

Обратите внимание, как в последнем случае строки отделены друг от друга.

Функция write()

Функция write() используется для записи в файлы Python, открытые в режиме записи.

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

Синтаксис

Пример

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

Переименование файлов в Python

Функция rename()

Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.

  • src = файл, который нужно переименовать
  • dest = новое имя файла

Пример

Текущая позиция в файлах Python

В Python возможно узнать текущую позицию в файле с помощью функции tell() . Таким же образом можно изменить текущую позицию командой seek() .

почему питон не может найти файл если он находится в одной папке с ним, или я , чтото не так делаю?

j-0QtiIJeW8.jpg

img

почему питон не может найти файл если он находится в одной папке с ним, или я , чтото не так делаю?

j-0QtiIJeW8.jpg

Потому что у тебя файл test, а открываешь ты text

Потому что у тебя файл test, а открываешь ты text

6BaQxlAD7aw.jpg

img

6BaQxlAD7aw.jpg

даже так

@Lancer.Rev.X

подозреваю потому что ты не указал перед файлом \

img

6BaQxlAD7aw.jpg

даже так

@Lancer.Rev.X

" в код и посмотри в какой директории находишься, может в этом ошибка

подозреваю потому что ты не указал перед файлом \

Не. По идее если файл находится в текущей директории, то должен открывать по имени+расширению

img

Добавь это "

" в код и посмотри в какой директории находишься, может в этом ошибка

Не. По идее если файл находится в текущей директории, то должен открывать по имени+расширению

это стандарт питона такой? конкретно в джаве / обязателен.

может в этом ошибка

так да, я не там , мне файл закинуть в ту дерикторию которая указана?(который я хочу отркыть)

Добавь это "

" в код и посмотри в какой директории находишься, может в этом ошибка

Не. По идее если файл находится в текущей директории, то должен открывать по имени+расширению

да, все работает, а есть варинат сменить дерикторию?

img

так да, я не там , мне файл закинуть в ту дерикторию которая указана?(который я хочу отркыть)

да, все работает, а есть варинат сменить дерикторию?

Либо меняешь директорию, либо как вариант укажи полный путь до файла и не мучайся

так да, я не там , мне файл закинуть в ту дерикторию которая указана?(который я хочу отркыть)

да, все работает, а есть варинат сменить дерикторию?

Может есть способы хитрей, но я питона только душить могу, поэтому не могу подсказать. Знаком только поверхностно


Руководство для тех, кому нужно узнать, существует ли файл (или папка) при помощи встроенных возможностей и функций Python из стандартной библиотеки.

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

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

В данном руководстве вы увидите три отдельные техники для проверки существования файла в Python, с примерами кода и характерными преимуещствами и недостатками.

Проверяем если файл существует os.path.exists() и os.path.isfile()

Эти функции доступны в Python 2 и Python 3.7, и обычно их рекомендуют в первую очередь, если обращаться за помощью к документации Python или гуглу за решением проблемы.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Вот пример того, как работать с функцией os.path.exists() . Мы проверим несколько путей (файлы и папки) на наличие:

Как мы видим, вызов os.path.exists() возвращает True для файлов и папок. Если вы хотите убедиться, что заданный путь указывает на файл, но не на папку, вы можете использовать функцию os.path.isfile()

Для обеих функций важно помнить о том, что они проверяют только существует файл, или нет, а не наличие доступа программы к нему. Если подтверждение доступа к файлу важно, то вам нужно выполнить простое открытия файла и поймать исключение IOError.

Мы вернемся к этой технике, когда будем подводить итоги в конце руководства. Но перед этим, рассмотрим еще один способ проверки существования файла в Python.

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

Есть еще один прямолинейный алгоритм Python для проверки существования файла: Вы просто пытаетесь открыть файл при помощи встроенной функции open() , вот так:

"[Errno 2] No such file or directory: 'нет-такого-файла.txt'"

Если файл существует, то файл успешно откроется и вернет валидный объект для дальнейшей обработки файла. Если файл не существует, появится ошибка FileNotFoundError:

Ошибка FileNotFoundError возникает, когда файл или папка запрошена, но не существует. Относится к errno ENOENT.

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

Обратите внимание, мы мгновенно вызываем метод close() для объекта файла для освобождения дескриптора файла. Это считается хорошей практикой при работе с файлами в Python:

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

Вместо того, чтобы закрывать файл при помощи метода close() , есть еще один способ, которым можно воспользоваться контекстным менеджером и оператора with для автоматического закрытия файла.

Теперь, та же техника “просто попробуем открыть файл” также работает для выяснения, является ли файл доступным и читаемым. Вместо поиска ошибок FileNotFoundError, вам нужно искать любые ошибки типа IOError:

Если вы часто используете этот шаблон, вы можете выделить его в вспомогательную функцию, которая позволит вам проверить, существует ли файл и является ли он в то же время доступным:

доступным для работы в предоставленным `mode` формате.

Как альтернатива, вы можете использовать функцию os.access() из стандартной библиотеке для проверки того, существует ли файл и является ли он доступным в то же время. Это может быть похоже на использование функции path.exists() , если файл существует.

Использование open() и try . except имеет некоторые преимущества, когда доходит до обработки файлов в Python. Это может помочь вам избежать накладок, вызванных определенными условиями существования файла:

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

Мы рассмотрим этот случай в конце руководства. Но перед этим, запрыгнем в еще одну кроличью нору. Рассмотрим еще один способ того, как проверить, существует ли файл в Python.

Пример проверки существования файла pathlib.Path.exists() (Python 3.4+)

Python 3.4 и выше содержит модуль pathlib , который предоставляет объектно-ориентированный интерфейс для работы с путями файловых систем. Использование этого модуля намного приятнее, чем работа с путями в виде объектов строк.

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

Чтобы узнать, указывает ли путь на настоящий файл, вы можете использовать метод Path.exists() . Чтобы узнать, является путь файлом, или символической ссылкой, а не папкой, вам захочется воспользоваться Path.is_file() .

Вот рабочий пример для обоих методов pathlib.Path :

Как мы видим, этот подход по своему принципу схож с проверкой при помощи функций из модуля os.path .

Использование pathlib и преимущества объектно-ориентированного интерфейса может сделать ваш код обработки более читаемым и понятным. Не будем лгать и говорить, что это панацея. Но в ряде случаев это может помочь вам написать более “лучшую” версию программы Python.

Модуль pathlib также доступен как сторонний модуль с бэкпортом для PyPl, который работает на Python 2.x и 3.х Вы можете найти его здесь: pathlib2.

Подведем итоги проверки на наличие файла в Python

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

Конечно, имея в распоряжении три способа, вы можете подумать:

Какой способ проверки наличия файла при помощи Python является предпочтительнее?

В большинстве случаев, когда вам нужно проверить наличие файла, рекомендуется использование встроенного метода pathlib.Path.exists() на Python 3.4 и выше, или функцию os.path.exists() для Python 2.

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

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

Чтобы избежать такой ситуации, стоит опираться не только на вопрос “существует ли файл?”. Вместо этого, неплохо просто попытаться сразу выполнить желаемую операцию. Это также называется “easier to ask for forgiveness than permission” (EAFP) (проще просить прощения, чем разрешения). Такой подход часто рекомендуется при работе с Python.

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

Итак, если вы планируете работать с файлом сразу после проверки, например, прочитать его содержимое путем внесение новых данных в него, рекомендуется выполнить проверку на наличие при помощи метода open() с последующей обработкой ошибки, пользуясь подходом EAFP. Это позволит вам избежать состояния гонки в вашем коде обработки файлов Python.


Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

PyCharm больше не распознает файлы Python. Путь интерпретатора установлен правильно.

Скриншот

Это не не по теме: software tools commonly used by programmers указано в разделе FAQ What kind of questions can I ask here? , это как раз тот случай. Зачем голосовать за его закрытие?

Пожалуйста, проверьте File | Settings ( Preferences в macOS) | Editor | File Types , убедитесь, что имя или расширение файла не указано в текстовых файлах.

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

Текст

У меня была такая же проблема, но с .egg-link файлом. Если вы используете удаленный интерпретатор, вам может потребоваться удалить интерпретатор и добавить новый. У меня была та же проблема, но имя файла было добавлено к расширению текстового файла Есть идеи, почему файл вообще добавлен в этот список текстовых файлов? Для меня это было спрятано в Setting | Editor | File Types . (2017.3.2) Мое фактическое имя файла было добавлено в список «типов файлов» вместо «текст» . прямо в самом низу списка. Муста нажал не ту кнопку, создав его.

У меня была аналогичная проблема, когда определенные .py файлы отображались как обычные текстовые файлы после завершения, таким образом, рендеринг кода без синтаксической окраски, функций завершения табуляции и т.д. Используя этот пост в качестве отправной точки для отладки проблемы, я обнаружил следующее:

  1. (из OSX): PyCharm → Настройки → Настройки IDE → Типы файлов.
  2. Выберите соответствующий тип файла из списка в верхней половине этого диалогового окна Recognized File Types (в моем случае текстовые файлы)
  3. Во второй половине диалогового окна Registered Patterns были перечислены имена файлов, с которыми у меня возникли проблемы с именованием / синтаксисом. Я щелкнул по каждому из них, а затем по - очереди щелкнул по каждому, чтобы удалить их из Registered Patterns списка.
  4. Нажмите Apply
  5. Вздох облегчения, когда подсветка синтаксиса возвращается и значок снова становится значком файла Python.
Какого черта, почему там был мой файл? В любом случае, это сработало для меня (в Windows). Остается вопрос, как этот файл оказался там, но да - вот и все! У меня сработало исправление PyCharm 3.4.1 для Linux. views.py был случайно добавлен в список текстовых файлов . Несколько дней разочаровали, спасибо.

Я случайно создал текстовый файл myfilename , переименовал его в myfilename.py версию, но он остался с форматированием текстового файла даже после изменения расширения.

Вот как я исправил это для PyCharm 2017.2 для Windows.

  1. Идти к File > Settings > Editor > File Types > Text
  2. В списке Registered Patterns я нашел новое myfilename.py .
  3. Удалите его из списка - кнопкой
  4. Нажмите Ok
Сделал то же самое, возникла та же проблема, но расширение файла .py отсутствует в списке «Текст», и PyCharm по-прежнему не распознает его даже после перезапуска (версия 2018.2) действительно странное поведение PyCharm там . Зачем вам этот файл в черный список .

Наконец-то он заработал!

У меня была такая же проблема. Я попытался удалить кеши pycharm в папках

/ Library, но безрезультатно. В журнале все время говорилось, что «Некоторые скелеты не удалось создать . »

Итак, вот что сработало.

  1. Зайдите в настройки
  2. В настройках проекта нажмите « Интерпретаторы проекта», а затем « Настроить интерпретаторы».
  3. Удалите существующие интерпретаторы (используя ' - ' и внизу), а затем нажмите OK внизу
  4. Если у вас загружен проект, он скажет: «У вас нет интерпретатора, настройте его сейчас. Вы можете щелкнуть по нему или вернуться в настройки-> Интерпретатор проекта-> Настроить интерпретаторы.
  5. Щелкните +, чтобы добавить нового интерпретатора. Если вы используете встроенный в os x python, вы можете выбрать нужную версию из списка.
  6. Снова нажмите ОК , подождите минуту или две, чтобы перестроить индексы, и все заработает (по крайней мере, для меня)
Для моей проблемы с PyCharm, видящей «встроенный» как нерешенный. Это решило это.

Наиболее частая проблема заключается в том, что у вас есть .py в типах файлов txt.

Другой случай, который случается время от времени, - это то, что вы связали фактическое имя файла с типом файла txt.

Решение осталось прежним

перейдите к файлу-> настройки-> типы файлов-> текстовые файлы и найдите .py или «имя файла», которое форматируется как текст.

Это может показаться действительно редким случаем, но это случилось со мной только сейчас, и ваш ответ помог. Я оказался в этом состоянии благодаря «нормальному поведению», выполнив следующие шаги: 1. Я щелкаю правой кнопкой мыши папку в дереве файлов и выбираю «новый файл» вместо «новый файл python». 2. Я предполагал, что .py будет добавлен, поэтому я набрал имя моего файла python (предположим, что это foo ) и нажал Enter. 3. Диалоговое окно выскочило побудило меня связать файл с типом файла, и , когда я просто добавить файл я приукрасил текст и просто изменил входной сигнал от foo к foo.py мысли , что мне нужно имя файла. 4. Я переименовал файл, foo.py думая, что он не работает или что-то в этом роде. 5. Теперь файл назван, foo.py и у меня есть правило, согласно которому foo.py это текстовый файл.

PyCharm Версия: 2020.1.4 Сборка: 201.8743.11

Вот что теперь работает:

Файл> Управление настройками IDE> Восстановить настройки по умолчанию

Единственная проблема с этим заключается в том, что если вы добавили много пользовательских настроек, вам придется вернуться и добавить их снова.

Читайте также: