为什么这些字符串在python中从我的正则表达式中逃脱?

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']

我无法理解发生了什么,为什么这两个人专门逃避我的搜索.

Set*_*eth 4

您正在循环内修改列表。这可能会导致问题。您应该改为循环遍历列表的副本 ( 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)