2015-09-04 48 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