2014-02-09 67 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

...只是想知道! –