Python文件查找代码问题:musiclist列表元素被覆盖仅存最后一项
问题解决:列表元素被覆盖的原因及修复方案
核心问题
你的代码里musiclist = []被放在了**内层循环(for l in range(...))**里,每次循环到新的路径片段时,都会重新创建一个空列表,把之前添加的元素全部清空,最后自然只剩最后一个符合条件的文件。
修复原代码
把musiclist的初始化移到所有循环外面,避免每次循环都重置列表:
# 把musiclist初始化放在循环外 musiclist = [] for i in range(len(highschool)): po.insert(0, highschool[i].split('\\')) for i in range(0, len(po)): for l in range(0, len(po[i])): # 简化判断逻辑,直接检查是否包含.mp3 if '.mp3' in po[i][l]: musiclist.insert(0, str(po[i][l]))
更简洁的优化方案
原代码的流程太冗余了,其实不用拆分路径再查找后缀。利用pathlib的glob可以直接递归匹配所有.mp3文件,一步到位:
from pathlib import Path # 方案1:循环添加(和你原代码的insert(0, ...)效果一致,倒序保存) musiclist = [] for file in Path("C:/Users/doppi/Onedrive").glob('**/*.mp3'): musiclist.insert(0, str(file)) # 方案2:列表推导式(更简洁) # 正序保存所有.mp3文件的完整路径 musiclist = [str(file) for file in Path("C:/Users/doppi/Onedrive").glob('**/*.mp3')] # 如果需要倒序(和insert(0, ...)效果相同),直接反转列表 musiclist = [str(file) for file in Path("C:/Users/doppi/Onedrive").glob('**/*.mp3')][::-1] # 如果你只需要文件名(不含路径),用file.name代替str(file) musiclist = [file.name for file in Path("C:/Users/doppi/Onedrive").glob('**/*.mp3')]
内容的提问来源于stack exchange,提问作者Marlon Lucio
相关产品推荐
相关产品推荐

