如何在Python中基于列表中的模式比较两个列表?
如何在Python中基于列表中的模式比较两个列表?
案例说明
案例1:
List_1 = ['aaa_123.csv','bbb_456.csv','ccc_789.csv','aaa_321.csv']
List_2 = ['aaa*.csv','bbb*.csv', 'ccc*.csv']
预期输出:List_2中的所有元素在List_1中均有匹配的模式。案例2:
List_1 = ['aaa_123.csv','bbb_456.csv','aaa_321.csv']
List_2 = ['aaa*.csv','bbb*.csv', 'ccc*.csv','ddd*.csv']
预期输出:List_2的模式未与List_1完全匹配,未找到'ccc*.csv'和'ddd*.csv'的匹配项。
解决方案
直接用Python标准库的fnmatch模块就能处理这类通配符匹配需求,它原生支持*这类通配符规则,无需自己写复杂正则。
代码实现
import fnmatch def check_pattern_matches(file_list, pattern_list): unmatched = [] for pattern in pattern_list: # 检查当前模式是否能匹配列表中至少一个文件 has_match = any(fnmatch.fnmatch(file, pattern) for file in file_list) if not has_match: unmatched.append(pattern) if not unmatched: print("List_2中的所有元素在List_1中均有匹配的模式。") else: print(f"List_2的模式未与List_1完全匹配,未找到{', '.join(map(repr, unmatched))}的匹配项。") # 测试案例1 List_1 = ['aaa_123.csv','bbb_456.csv','ccc_789.csv','aaa_321.csv'] List_2 = ['aaa*.csv','bbb*.csv', 'ccc*.csv'] check_pattern_matches(List_1, List_2) # 测试案例2 List_1 = ['aaa_123.csv','bbb_456.csv','aaa_321.csv'] List_2 = ['aaa*.csv','bbb*.csv', 'ccc*.csv','ddd*.csv'] check_pattern_matches(List_1, List_2)
运行结果
- 案例1输出:
List_2中的所有元素在List_1中均有匹配的模式。 - 案例2输出:
List_2的模式未与List_1完全匹配,未找到'ccc*.csv', 'ddd*.csv'的匹配项。
内容的提问来源于stack exchange,提问作者pradeep nadarajan
相关产品推荐
相关产品推荐

