Python如何判断列表元素是否存在于文件中并打印对应元素及文件名
问题原因与修复方案
核心问题点
readlines()返回的每行元素末尾自带换行符\n,和目标文件内容匹配时会因为多出的换行符匹配失败,表现为匹配元素无法正常输出。- 文件对象的
read()方法执行一次后,文件指针会移动到文件末尾,后续循环再次调用f.read()只会返回空字符串,除第一次循环外都无法正常匹配。 - 打开的文件未手动关闭,存在资源占用风险,推荐使用
with上下文管理器自动管理文件生命周期。
修复后的单文件匹配代码
import os os.system('cls') # 提前读取待匹配字段,去除每行首尾空白、过滤空行 with open('fieldnames.txt', 'r', encoding='utf-8') as z: target_elements = [line.strip() for line in z if line.strip()] # 提前读取一次目标文件内容,避免循环中重复读取 with open('TestSQL.sql', 'r', encoding='utf-8') as f: sql_content = f.read() # 遍历匹配 for element in target_elements: if element in sql_content: print(f"匹配元素:{element}") print(f"所在文件:{f.name}")
多文件遍历扩展实现
如果需要遍历文件夹下所有文件,输出每个元素的出现文件列表,可以参考如下代码:
import os os.system('cls') # 读取待匹配字段列表 with open('fieldnames.txt', 'r', encoding='utf-8') as z: target_elements = [line.strip() for line in z if line.strip()] # 配置目标遍历目录,示例为当前脚本所在目录 target_dir = './' # 初始化元素-文件映射表 element_file_map = {elem: [] for elem in target_elements} # 递归遍历目录下所有.sql文件,可按需修改后缀过滤规则 for root, _, files in os.walk(target_dir): for file in files: if file.endswith('.sql'): file_path = os.path.join(root, file) with open(file_path, 'r', encoding='utf-8') as f: content = f.read() for elem in target_elements: if elem in content: element_file_map[elem].append(file_path) # 格式化输出结果 for elem, file_list in element_file_map.items(): if file_list: print(f"元素「{elem}」出现的文件:") for file_path in file_list: print(f"- {file_path}") print("="*20)
内容的提问来源于stack exchange,提问作者Bianca Rodriguez
相关产品推荐
相关产品推荐

