2014-02-09 2 views
0

Я создаю программу Python 3 для Windows 7 для поиска общих имен для исполняемых файлов на компакт-диске и запуска их. Я попытался использовать несколько os.path.exists, но когда он находит правильный файл, он печатает, что он не может найти другие возможные имена файлов. Пожалуйста, помогите!Искать другие диски в Windows для определенных файлов в Python 3

 if os.path.exists("D:/autorun.exe"): 
      os.startfile("D:/autorun.exe") 
     else: 
      print("Failed Attempt!") 
     if os.path.exists("D:/Install.exe"): 
      os.startfile("D:/Install.exe") 
     else: 
      print("Failed Attempt!") 
     if os.path.exists("D:/AutoRun.exe"): 
      os.startfile("D:/AutoRun.exe") 
     else: 
      print("Failed Attempt!") 
     if os.path.exists("D:/install.exe"): 
      os.startfile("D:/install.exe") 
     else: 
      print("Failed Attempt!") 
+0

Я действительно не знаю, что делать! –

+0

добавил код в вопрос! –

+0

Не могли бы вы показать мне пример того, как это используется? –

ответ

0

Как вы код, как представляется, по-видимому, на том же уровне отступа, каждый из ваших if/else блоков будет выполняться один за другим, поэтому печатание «неудачная попытка!» для каждого пути к файлу, который не существует. С учетом вашего комментария 12 марта вы можете использовать цикл for, за которым следует блок if/else, чтобы убедиться, что «Failed Tryempt!» печатается только после того, как все файлы были проверены на наличие. Смотрите ниже код (Примечание: Поскольку у меня нет Windows 7 под рукой, я не проверял это, но он должен работать):

import os 
FILES = ('D:/autorun.exe', 'D:/Install.exe', 'D:/AutoRun.exe', 'D:/install.exe') 
FILE_FOUND = False 

for file in FILES: 
    if os.path.exists(file): 
     FILE_FOUND = file 
     break 

if FILE_FOUND: 
    os.startfile(FILE_FOUND) 
else: 
    print("Failed Attempt!") 

Так разбить его шаг за шагом:

  1. Импортируйте модуль os, который вы, очевидно, уже сделали это в другом месте.

  2. Пути файлов для каждого проверяемого файла должны храниться в виде кортежа в FILES. Кортеж используется, потому что он «неизменный», и поэтому мы знаем, что он будет храниться точно так, как показано выше. Это также удобно, так как это будет означать, что цикл for проверяет каждый файл в порядке слева направо.

  3. FILE_FOUND первоначально присваивается как False. Это будет использовано позже для 2 вещей:

    • Чтобы сохранить строку файла пути файла от FILES, если она существует.
    • Используется для определения того, должен ли выполняться os.startfile().
  4. Следующая петля for. Каждая строка пути файла в корте для FILES будет доступна для проверки с помощью отступающего кода, следующего за for file in FILES:. Переменная file представляет собой строку, представляющую текущий путь к файлу от FILES, и она является локальной для кода, связанного с циклом for. Затем цикл проверяет, существует ли файл в указанной строке пути файла в file. Если файл существует, то FILE_FOUND присваивается строка, хранящаяся в file. Затем оператор break выходит из цикла for без учета каких-либо элементов в FILES, которые не были проверены. В противном случае цикл for будет продолжать работать до тех пор, пока не закончится количество элементов для проверки в FILES.

  5. Наконец, блок кода if/else будет работать только после того, как цикл for имеет либо нашел файл, который существует, или закончил работать все пункты в FILES.Если FILE_FOUND вычисляется как True (в силе не будучи None, 0, False, или в соответствии с python docs), os.startfile(FILE_FOUND) будет выполняться, когда мы знаем, что путь_к_файл строка из существующего файла была предварительно сохранены в FILE_FOUND петле for , Если ни одна из строк файловой трассы не найдена в цикле for, переменная FILE_FOUND по-прежнему будет False, поэтому печать «Failed Attempt!».

+0

Я использую Linux сейчас ... так как я могу это сделать? Эти компакт-диски автоматически устанавливаются в каталоге/media, но это будет общее, поэтому как мне это сделать, просто поискать имена файлов (а не путь и имена файлов)? –

+0

... просто интересно! –