2014-02-09 39 views
0

我正在为Windows 7创建一个Python 3程序,以便在CD上搜索安装可执行文件的通用名称并运行它。我试过使用多个os.path.exists,但是当它找到正确的文件时,它会打印出它找不到其他可能的文件名。 请帮忙!在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块的每一个将被执行了一个又一个,因此打印“失败的尝试!”对于每个不存在的文件路径。根据您在3月12日的评论,您可以使用for循环,然后使用if/else块来确保“失败尝试!”只有在所有文件检查存在后才打印。请参阅下面的代码(注:我没有做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. 最后,一旦for环路或者发现不存在,或者已经完成通过所有项目在FILES工作文件中if/else代码块才会运行。如果FILE_FOUND评估为True(由于不是None0False的,或按照python docs),os.startfile(FILE_FOUND)将被执行,我们知道,现有的文件的文件路径字符串已经由for环预先存储在FILE_FOUND 。如果for循环中找不到任何文件路径字符串,则FILE_FOUND变量仍将为False,因此会打印“Failed Attempt!”(失败尝试!)。

+0

我现在正在使用Linux ......所以我该怎么做? CD会自动挂载到/ media目录下,但这将是一般性的,所以我怎么通过搜索文件名(而不是路径和文件名)来做到这一点? –

+0

...只是想知道! –