如何用Python实现查找包含多个无序指定字符串的文件的功能
Python多关键词无序匹配文件查找脚本修改方案
原有代码存在的问题
- 关键词输入逻辑放在文件遍历循环内,会导致每处理一个文件就要求用户重复输入一次关键词
- 缺少文件打开逻辑,直接调用
file.readline()会抛出未定义变量错误 - 城市匹配错误调用了
line.find(lname),实际应该匹配city变量 - 未定义
index变量,且逐行单关键词匹配逻辑不符合需求:不需要三个关键词出现在同一行,只需全文件范围内所有关键词都存在即可
修改后完整代码
import os # 替换为你的学生文件夹实际路径 path = "./Students" # 仅在程序启动时输入一次关键词 target_strings = [ input("Enter first name: ").strip(), input("Enter last name: ").strip(), input("Enter home city: ").strip() ] # 遍历文件夹下的所有文件 for filename in os.listdir(path): # 跳过文件夹,只处理txt格式的学生信息文件,可根据需求修改后缀过滤规则 if not filename.endswith(".txt"): continue file_path = os.path.join(path, filename) # 自动管理文件句柄,无需手动关闭 with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: content = f.read() # 检查所有关键词是否都在文件中存在,顺序不限 all_match = all(s in content for s in target_strings) if all_match: # 输出不带后缀的文件名,和预期输出格式一致 print(os.path.splitext(filename)[0])
逻辑说明
- 关键词只在程序启动时输入一次,避免重复操作
- 用
os.path.join拼接路径,兼容不同操作系统的路径规则 - 用
with open语法自动管理文件句柄,不需要手动关闭文件,避免资源泄漏 - 用生成器表达式+
all()函数判断所有目标字符串是否都存在于文件内容中,天然支持无序匹配,不需要考虑关键词出现的位置和顺序 - 最后用
os.path.splitext去掉文件后缀,和你预期的输出格式完全匹配 - 如果需要不区分大小写匹配,可以把
content = f.read()改为content = f.read().lower(),同时在输入关键词的.strip()后追加.lower()方法即可
内容的提问来源于stack exchange,提问作者Humble Hermit
相关产品推荐
相关产品推荐

