我想根据目录列表返回一个列表进行排序。我的问题是,当我为该列表中的每个文件执行循环并尝试根据用户输入的.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()
答案 0 :(得分:1)
对你上次评论的简短回答:
这是因为for
循环在循环的每次迭代开始时按顺序从files
列表中检索项目。它使用隐藏的整数索引来执行此操作。因此,如果在迭代期间删除元素,则索引将“不同步”。
这篇文章包含更多细节:How to remove list elements in a for loop in Python?