在Python2.7中,如何循环遍历if语句中的选项列表?
我正在从包含不同格式和不同后缀的音频文件(例如在Python2.7中,如何循环遍历if语句中的选项列表?,python,python-2.7,Python,Python 2.7,我正在从包含不同格式和不同后缀的音频文件(例如\u master或\u 128k)的混合文件的子目录中提取项目 我在代码的上面指定了一个允许的扩展名列表(例如,.mp3),以便只提取正确格式的文件进行处理 我还有一个包含文件名后缀的列表(后缀除外)(例如,\u syndication),我明确希望排除在进一步处理之外 我怎样才能最好地写出一行有效地做到: if fileExtension in filesAllowed and [LIST OF EXCLUDED SUFFIXES] not in
\u master
或\u 128k
)的混合文件的子目录中提取项目
我在代码的上面指定了一个允许的扩展名列表(例如,.mp3
),以便只提取正确格式的文件进行处理
我还有一个包含文件名后缀的列表(后缀除外)(例如,\u syndication
),我明确希望排除在进一步处理之外
我怎样才能最好地写出一行有效地做到:
if fileExtension in filesAllowed and [LIST OF EXCLUDED SUFFIXES] not in fileName:
在这个
if
子句中,是否有一种简洁、简洁、优雅(pythonic)的方式来迭代我的排除列表,或者我是否需要设置一个辅助循环来测试每个项目?您可以使用any
和一个生成器表达式来检查所有后缀。您还可以使用几个临时变量来帮助可读性
included = fileExtension in filesAllowed
excluded = any(fileName.endswith(suffix) for suffix in suffixList)
if included and not excluded:
...
any
中的表达式生成一系列的bool
s,并且any
检查其中是否有True
您可以边走边过滤,传递要保留的扩展名的元组,并使用any筛选这些扩展名,以从排除的子字符串列表中删除具有匹配扩展名但不包含任何子字符串的任何文件
exc = [LIST OF EXCLUDED SUFFIXES]
import os
for f in os.listdir("path"):
if f.endswith((".mp4",".mp3",".avi")) and not any(e in f for e in exc):
只需对目录内容进行一次遍历,无需首先构建列表
如果要替换禁止的子字符串而不仅仅是排除,可以使用re.sub:
import os
import re
r = re.compile(r"|".join([e for e in exc]))
for f in os.listdir("path"):
if f.endswith((".mp4",".mp3",".avi")):
f = r.sub("",f)
你在说什么语言?python如果是这样的话,请添加适当的标签。对不起-我很傻,没有注意到我说的是python 2.7谢谢;这是一个令人惊奇的网站。不到10分钟,我就学到了新东西!现在真漂亮!谢谢工作起来很有魅力!现在,我需要一个聪明的方法来去除有问题的后缀来清理文件名。我想我可以再次使用类似的技巧…@drchrismith,你想保留该文件但删除
\u辛迪加
等吗?谢谢。你真是太好了。这是一种很棒的学习方式。@Chrismith博士,没问题,我编辑了答案,如果你是这个意思,请告诉我