在python2.7中,如何循环遍历if语句中的选项列表?

2024-10-03 23:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从一个子目录中提取项,该子目录包含不同格式和不同后缀的音频文件,例如_master_128k。你知道吗

我在代码的上面指定了一个允许扩展名的列表(例如.mp3),以便只提取正确格式的文件进行处理。你知道吗

我还有一个包含文件名后缀(例如_syndication)的列表(suffexexcluded),我明确希望从进一步处理中排除这些后缀。你知道吗

我怎样才能最好地写出一行有效地做到:

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

在这个if子句中,是否有一种简洁、简洁、优雅(pythonic)的方法来迭代我的排除列表,或者我是否需要设置一个辅助循环来测试每个项?你知道吗


Tags: 文件代码inmaster列表if文件名格式
2条回答

您可以边过滤边传递要保留的扩展名的元组,并使用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):

只需对目录内容进行一次传递,无需首先构建列表。你知道吗

如果您想替换禁止的子字符串,而不只是排除,您可以使用回复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)

您可以使用any和生成器表达式来检查所有后缀。您还可以使用几个临时变量来提高可读性。你知道吗

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

if included and not excluded:
    ...

any中的表达式生成一系列的bool,并且any检查其中是否有True。你知道吗

相关问题 更多 >