为什么这些字符串会从 python 中的正则表达式中转义?
在我的代码中,我将整个文件夹加载到列表中,然后尝试删除列表中除 .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
运行该文件后,代码确实删除了列表中的一些文件,但特别保留了这两个文件:
['00.各种艺术家 - 独立摇滚播放列表 2008 年 10 月.m3u', '00.各种艺术家 - 独立摇滚播放列表 2008 年 10 月.pls']
我不明白发生了什么,为什么这两个人专门逃避我的搜索。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您正在循环内修改列表。这可能会导致问题。您应该改为循环遍历列表的副本(
for name in dirList[:]:
),或者创建一个新列表。或者甚至更好,使用列表理解:
同样的事情,没有正则表达式:
You are modifying your list inside a loop. That can cause issues. You should loop over a copy of the list instead (
for name in dirList[:]:
), or create a new list.Or even better, use a list comprehension:
The same thing, without a regular expression:
也许你应该使用 glob 模块 - 这是你的整个脚本:
maybe you should use the glob module - here is you entire script:
一旦您调用 dirList.remove(names),原始迭代器就不会执行您想要的操作。如果您迭代列表的副本,它将按预期工作:
或者,您可以使用 列表推导式 构建正确的列表:
As soon as you call
dirList.remove(names)
, the original iterator doesn't do what you want. If you iterate over a copy of the list, it will work as expected:Alternatively, you can use list comprehensions to construct the right list: