2014-03-05 52 views
0

我有一個python腳本試圖將兩個文件相互比較並輸出差異。但我不知道究竟是怎麼回事,當我運行它給我一個錯誤的腳本如何通過python中的目錄進行掃描?

NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\api\\API_TEST\\Apis.os\\*.*' 

,因爲我不知道爲什麼它是追加*。 *在文件擴展結束時。

這是目前我的功能:

def CheckFilesLatest(self, previous_path, latest_path): 

    for filename in os.listdir(latest_path): 

     previous_filename = os.path.join(previous_path, filename) 
     latest_filename = os.path.join(latest_path, filename) 

     if self.IsValidOspace(latest_filename): 

      for os_filename in os.listdir(latest_filename): 
       name, ext = os.path.splitext(os_filename) 

       if ext == ".os": 
        previous_os_filename = os.path.join(previous_filename, os_filename) 
        latest_os_filename = os.path.join(latest_filename, os_filename) 

        if os.path.isfile(latest_os_filename) == True: 

         # If the file exists in both directories, check if the files are different; otherwise mark the contents of the latest file as added. 
         if os.path.isfile(previous_os_filename) == True: 
          self.GetFeaturesModified(previous_os_filename, latest_os_filename) 
         else: 
          self.GetFeaturesAdded(latest_os_filename) 

     else: 
      if os.path.isdir(latest_filename): 
       self.CheckFilesLatest(previous_filename, latest_filename) 

爲什麼它不能掃描目錄,並尋找適合例如OS文件有什麼想法?

它失敗在線:

for os_filename in os.listdir(latest_filename): 

代碼首先會從

def main(): 
    for i in range(6, arg_length, 2): 
     component = sys.argv[i] 
     package = sys.argv[i+1] 

     previous_source_dir = os.path.join(previous_path, component, package) 
     latest_source_dir = os.path.join(latest_path, component, package) 

     x.CheckFilesLatest(previous_source_dir, latest_source_dir) 
     x.CheckFilesPrevious(previous_source_dir, latest_source_dir) 

稱爲謝謝

+1

如果你告訴我們在什麼情況下引發異常,這將有所幫助。 –

+0

對不起,它的失敗說明:對於os.listdir(latest_filename)中的os_filename: – user974873

+0

你能檢查這個函數的argumetns是什麼。在函數入口點添加打印語句 –

回答

1

os.listdir()要求latest_path參數是一個目錄,就像你所說的那樣。但是,latest_path被作爲參數傳入。因此,您需要查看實際創建latest_path的代碼,以確定爲什麼''正被放入。由於您正在遞歸調用,請首先檢查原始呼叫(第一次)。看起來您調用CheckFilesLatest()的基本代碼嘗試設置搜索命令來查找目錄'C:\ api \ API_TEST \ Apis.os'中的所有文件。您需要首先拆分文件指示符,然後然後做檢查。