2015-09-04 85 views
0

我想返回一個基於目錄列表的列表進行排序。我的問題是,當我爲該列表中的每個文件執行循環並試圖根據用戶輸入的擴展名.endswith()刪除它似乎不正確更新列表(但它確實打印出「刪除文件...」)。難道我做錯了什麼?我應該更新或返回列表(files)的地方我不?>python不刪除目錄列表中的列表項

另外,如果我設置dirlist變量filesfiles=file_list.sort()返回沒有,我必須設置files=sorted(file_list) ......這是爲什麼?

import os 

class Sort: 

dirchoice = os.getcwd() 
file_list = list(os.listdir(dirchoice)) 
files=sorted(file_list) 

def file_extension(self): 
    if input("Would you like to specify a particular file extension [Y/N]").lower() == ('y' or 'yes'): 
     ext=input("filetype>") 
     ext = str(ext) 
     for file in self.files: 
      print(file) 
      if not file.endswith(ext): 
       self.files.remove(file) 
       print("removing " +file+ " from list...") 
     return self.files 
     print("File Contents: ")   
     pprint.pprint(self.files)  
     return self.file_extension() 
+3

問題尋求幫助調試(**「?爲什麼不是這個代碼工作」 **)必須包括所期望的行爲,*一個特定的問題或錯誤*和*在問題本身**中重現它的最短代碼*。沒有**明確問題陳述**的問題對其他讀者沒有用處。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – MattDMo

+0

你有沒有考慮過使用調試器?在程序中添加斷點並找出哪一行導致了錯誤的主題。 – Poriferous

+0

對不起,第一篇文章,是更好的?我甚至不能在IDLE上做這項工作,它肯定是丟失了循環和dirlist列表的東西 – conma293

回答

1

簡短回答你最後的評論:

這是因爲for循環從files列表順序檢索項目,在每次循環的開始。它使用隱藏的整數索引來做到這一點。因此,如果元素在迭代過程中被刪除,索引會「不同步」。

此帖子包含一些細節:How to remove list elements in a for loop in Python?

+0

謝謝Sanjay,有沒有類似的原因,爲什麼我不能使用file_list.sort(),但排序(file_list)可以嗎? – conma293