mar*_*les 5 python iteration list
在我的代码中,我将整个文件夹加载到列表中,然后尝试除去.mp3文件之外的列表中的每个文件.
import os
import re
path = '/home/user/mp3/'
dirList = os.listdir(path)
dirList.sort()
i = 0
for names in dirList:
match = re.search(r'\.mp3', names)
if match:
i = i+1
else:
dirList.remove(names)
print dirList
print i
Run Code Online (Sandbox Code Playgroud)
运行该文件后,代码确实摆脱了列表中的一些文件,但特别保留了这两个文件:
['00.各种艺术家 - 独立摇滚播放列表2008年10月.m3u','00.各种艺术家 - 独立摇滚播放列表2008年10月.pls']
我无法理解发生了什么,为什么这两个人专门逃避我的搜索.
您正在循环内修改列表。这可能会导致问题。您应该改为循环遍历列表的副本 ( for name in dirList[:]:),或创建一个新列表。
modifiedDirList = []
for name in dirList:
match = re.search(r'\.mp3', name)
if match:
i += 1
modifiedDirList.append(name)
print modifiedDirList
Run Code Online (Sandbox Code Playgroud)
或者更好的是,使用列表理解:
dirList = [name for name in sorted(os.listdir(path))
if re.search(r'\.mp3', name)]
Run Code Online (Sandbox Code Playgroud)
同样的事情,没有正则表达式:
dirList = [name for name in sorted(os.listdir(path))
if name.endswith('.mp3')]
Run Code Online (Sandbox Code Playgroud)