python不删除目录列表的列表项

时间:2015-09-04 23:33:18

标签: python list loops

我想根据目录列表返回一个列表进行排序。我的问题是,当我为该列表中的每个文件执行循环并尝试根据用户输入的.endswith()扩展名进行删除时,它似乎没有正确更新列表(但它确实打印出“删除文件.. “)。难道我做错了什么?我应该更新或返回列表(files)我不在的地方吗?>

此外,如果我将dirlist变量files设置为files=file_list.sort(),则返回none,我必须设置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()

1 个答案:

答案 0 :(得分:1)

对你上次评论的简短回答:

这是因为for循环在循环的每次迭代开始时按顺序从files列表中检索项目。它使用隐藏的整数索引来执行此操作。因此,如果在迭代期间删除元素,则索引将“不同步”。

这篇文章包含更多细节:How to remove list elements in a for loop in Python?