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
相关产品推荐
相关产品推荐

