如何在python 2.7中循环if语句中的选项列表?

时间:2015-06-03 22:06:04

标签: python python-2.7

我从包含混合文件的子目录中提取项目,这些文件是不同格式的音频文件,并且具有不同的后缀,例如_master_128k

我在代码中指定了更高的允许扩展名列表(例如.mp3),以便我只提取正确格式的文件进行处理。

我还有一个包含文件名后缀的列表(suffixExcluded)(例如_syndication)我明确希望从进一步处理中排除。

如何最有效地编写有效的行:

if fileExtension in filesAllowed and [LIST OF EXCLUDED SUFFIXES] not in fileName:

是否有一种整洁,紧凑和优雅(pythonic)的方式来遍历此if子句中的排除列表,或者我是否需要设置辅助循环来测试每个项目?

2 个答案:

答案 0 :(得分:1)

您可以随意过滤,传递要保留的扩展元组,并使用any过滤那些扩展,以删除任何包含不包含排除子字符串列表中任何子字符串的扩展名的文件。

File file = new File("D:\\hl_sv\\L09MF.txt");
try (PrintWriter writer = new PrintWriter("D:\\hl_sv\\L09MF2.txt");
        Scanner scanner = new Scanner(file)) {
    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        writer.println(line.replace('?', '-'));
    }
} catch (Exception e) {
    e.printStackTrace();
}

您只需要对目录内容进行一次传递,而无需先构建列表。

如果你想要替换禁用的子串而不仅仅是排除你可以使用re.sub:

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):

答案 1 :(得分:0)

您可以将any与生成器表达式一起使用来检查所有后缀。您可能还会使用一些临时变量来提高可读性。

included = fileExtension in filesAllowed
excluded = any(fileName.endswith(suffix) for suffix in suffixList)

if included and not excluded:
    ...

any内的表达式会生成一系列boolany,并检查其中是否有True