You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python传入子字符串列表匹配文件名 实现循环中批量过滤排除指定文件

问题原因

你的原始代码逻辑存在判断错误:遍历排除子串列表mylist时,只要遇到任意一个子串不在当前文件名中就会触发打印逻辑,而非所有排除子串都不在文件名中才打印。
举个实际场景:假设某文件名包含排除子串abcd11但不包含jklm12,遍历到jklm12时就会满足i not in file_name的条件,导致本该被排除的文件仍然被输出。

修复方案

可以直接使用Python内置的all()或any()函数批量做子串存在性判断,替换原来的嵌套循环,代码如下:

import glob

list_of_files = glob.glob('D:/folder/*.gz') # 创建待匹配的文件列表
mylist=['abcd11','abcd12','jklm12','wxyz.12'] # 待排除的子串列表

for file_name in list_of_files:
    for ind in df.index:
        if df['filename'][ind] in file_name: # 先匹配df中记录的文件名
            # 仅当文件名不包含mylist中所有子串时才打印
            if all(i not in file_name for i in mylist):
                print(file_name)

如果你更习惯用跳过逻辑,也可以用any()写法,效果完全一致:

import glob

list_of_files = glob.glob('D:/folder/*.gz')
mylist=['abcd11','abcd12','jklm12','wxyz.12']

for file_name in list_of_files:
    for ind in df.index:
        if df['filename'][ind] in file_name:
            # 只要文件名包含任意一个排除子串就跳过当前文件
            if any(i in file_name for i in mylist):
                continue
            print(file_name)

内容的提问来源于stack exchange,提问作者rebel095

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:45:03