Файл не существует но существует

Обновлено: 04.07.2024

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

627 1 1 золотой знак 5 5 серебряных знаков 15 15 бронзовых знаков

Для проверки существования заданного пути используйте функцию os.path.exists :

Но она вернет True и для файла и для директории.

os.path.isfile проверит именно на наличие файла.

627 1 1 золотой знак 5 5 серебряных знаков 15 15 бронзовых знаков

Кратко: вместо if exists(): open() используйте просто open() .

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

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

Ответы на комментарии:

  1. Где блок finally в котором вы закрывается поток

finally здесь не нужен. Если код попал в except блок, то файл не открыт -- нечего закрывать. В else ветке, где файл открыт, with file: конструкция всегда закрывает файл при выходе из блока (нормальном или когда исключение возникло).

  1. Конструкция try-exept-else многими считается плохо читаемой.

Обычно try/except не используется на том же уровне, то есть в коде используется просто:

а возможные исключения выше по стеку обрабатываются. Но если вы хотите обработать ошибку в open() на том же уровне, то вы обязаны использовать try/except ( open() сигнализирует ошибки с помощью исключений).

  1. Каждый раз, когда файла нет, вы вызываете прерывание ОС (на нем строится механизм обработки исключения) самостоятельно, не слишком ли это раcточительно?

Исключения выбрасываются в случае ошибки в Питоне хотите вы этого или нет. Вот реализация os.path.exists() из стандартной библиотеки:

фактически, используя open() напрямую, а не if exists(): open() мы уменьшаем количество системных вызовов.

У меня есть приложение, которое локализовано для использования по всей Европе.

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

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

FileNotFoundException генерируется, когда StreamReader пытается открыть файл.

Там написано "Не удалось найти файл C: \ Program Files \ MyCompany \ MyTool \ bin \ Files \ debug.txt '"

Дело в том, что файл существует, в правильном месте и с правильным именем файла.

Имена каталогов в целевой (французской) операционной системе совпадают с именами машины dev.

4 ответа

Хорошо, нашел проблему.

Определил, что операционная система считывает файл, отображаемый в проводнике, как «debug.txt» как «debug.txt.txt».

Это было определено с помощью вызова System.IO.Directory.GetFiles для получения списка файлов в целевом каталоге.

Если я удаляю расширение .txt, чтобы проводник Windows отображал его как «отладочный», файл будет найден.

Оказывается, проводник скрывал расширения файлов известных типов на целевой машине.

К вашему сведению ---------------------------------------------- ------------------

Откройте проводник, выберите «Инструменты» -> «Параметры папки», затем вкладку «Просмотр».

Прокрутите вниз и снимите флажок «Скрыть расширения для известных типов файлов».

Чтобы убедиться, что вы находитесь в правильной папке, посмотрите Environment.SpecialFolders

Затем также проверьте разрешения для конкретного файла.

Возможно, этот префикс неправильный: C:\Program Files

Например, для установок бразильского португальского Windows эта папка становится "C:\Arquivos de Programas\" ; Вы должны убедиться, что ваши установки Windows не имеют такой же "функции".

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

Вы также можете попробовать использовать ourPath whoanswered">ответил Rubens Farias 27 января 2010, 15:13:39

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

Я понятия не имею, почему ОС не может даже видеть файл, когда он есть. Есть мысли?

эта ошибка может означать, что ./arm-mingw32ce-g++ не существует (но существует) или что он существует и является динамически связанным исполняемым файлом, распознанным ядром, но динамический загрузчик которого недоступен. Вы можете увидеть, какой динамический загрузчик требуется, запустив ldd /arm-mingw32ce-g++ ; меченые not found - это динамический загрузчик или библиотека, которую необходимо установить.

если вы пытаетесь запустить 32-разрядный двоичный файл при установке amd64:

  • до Ubuntu 11.04, установить пакет ia32-libs .
  • на Ubuntu 11.10, установить ia32-libs-multiarch .
  • начиная с 12.04, установка ia32-libs-multiarch , или выберите разумный набор :i386 пакеты в дополнение к :amd64 пакеты.

я столкнулся с этой ошибкой, когда пытался построить источник селена на Ubuntu. Простой сценарий оболочки с правильным shebang не смог работать даже после того, как я покрыл все предварительные требования.

Я открыл файл в Vim, и я мог видеть, что только потому, что я когда-то редактировал этот файл на машине Windows, он был в формате DOS. Я преобразовал файл в формат Unix с помощью команды ниже:

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

и посмотрите, получите ли вы какой-либо выход.

в моем случае актуальна проблема заключалась в том, что файл, который я пытаюсь выполнить в Windows формат, а не linux.

Я получил эту ошибку “No such file or directory” но он существует, потому что мой файл был создан в Windows, и я попытался запустить его на Ubuntu, и файл содержал недопустимый 15\r, где когда-либо была новая строка. Я только что создал новый файл, усекающий нежелательные вещи

откройте сеанс ssh на сервере
кошку именем
скопируйте выходные данные в буфер обмена
РМ именем
нажмите filename
vi filename
i для режима вставки
вставить содержимое из буфер обмена
ESC для завершения режима вставки
: wq!

Это работает для меня.

у меня просто была эта проблема в mingw32 bash . Я execuded узел/НПМ от Program Files (x86)\nodejs , а затем перевез их в disabled каталог (по существу, удаление их из пути). У меня тоже было Program Files\nodejs (т. е. 64-битная версия) в пути, но только после версии x86. После перезапуска оболочки bash можно найти 64-битную версию npm. node работал правильно все время (проверено с node -v это изменилось, когда версия x86 была перемещена).

ниже команда работала на 16.4 Ubuntu

эта проблема возникает, когда ваш .SH файл поврежден или не отформатирован в соответствии с протоколами unix.

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

Если файлы отсутствуют, следуйте нашему руководству по восстановлению файлов, если вы только что удалили их.

Проводник не показывает файлы

Проводник не показывает файлы, хотя они существуют

  1. Использовать Обновить
  2. Перезапустите проводник
  3. Очистить кеш значков
  4. Проверьте, не скрыты ли файлы.
  5. Восстановить системные файлы.

Для одного из этих шагов вам потребуется разрешение администратора.

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

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

2]Перезапустите проводник.

Перезапустите проводник

Если обновление не помогает и занимает больше времени, чем ожидалось, лучше перезапустить проводник.

Вы можете использовать Ctrl + Shift + Esc или Alt + Ctrl + Del, чтобы открыть диспетчер задач, который покажет список текущих программ, запущенных в Windows. Обратите внимание: «Проводник Windows» отображается в списке и не отвечает. Щелкните его правой кнопкой мыши и выберите «Перезагрузить».

3]Очистить кеш значков

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

Мы предлагаем перестроить кэш значков, чтобы решить проблемы, связанные с этим. Вы можете использовать нашу бесплатную программу Icon Cache Rebuilder, чтобы сделать это легко.

4]Проверьте, не скрыты ли файлы

Скрыть файлы в проводнике

Когда вы окажетесь внутри папки, нажмите на просмотр и установите флажок «Скрыть элементы». Если бы папки были отмечены как скрытые, они бы теперь были видны. Они будут отличаться от обычных папок, но вы сможете получить доступ ко всем файлам внутри них.

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

5]Восстановить системные файлы

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

В CMD с повышенными привилегиями выполните следующую команду:

Как только процесс завершится, перезагрузите компьютер и снова откройте проводник и проверьте, видите ли вы их.

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