
本文介绍如何使用python高效提取文本文件中包含特定关键词(如“holiday”)的完整行内容,并输出或保存匹配结果。
本文介绍如何使用python高效提取文本文件中包含特定关键词(如“holiday”)的完整行内容,并输出或保存匹配结果。
在处理日志、配置文件或结构化文本时,我们常需要根据关键词筛选整行内容,而非仅提取关键词本身。原始代码存在多个关键问题:read() 读取整个文件为单一字符串,导致无法按行匹配;strip() 被错误地放在循环内反复调用;find() 返回非零值(如 0)时仍被判定为 True,造成逻辑误判(例如 "holiday" 出现在行首时 find() 返回 0,但 if 0: 为假,反而漏匹配)。
正确做法是逐行读取并判断。推荐使用 with open(...) 上下文管理器确保文件安全关闭:
count = 0
matches = []
with open("test.txt", "r", encoding="utf-8") as txt_file:
for line in txt_file: # 直接迭代文件对象,内存友好
if "holiday" in line.lower(): # 使用 .lower() 实现大小写不敏感匹配
count += 1
matches.append(line.rstrip('\n')) # 去除换行符,便于后续处理
print(line, end='') # 保留原格式输出(含换行)
运行后将精准输出:
1. on July 4 I'm going to celebrate a holiday called July 4th! 2. on January 1st it's new years a international holiday!
注意事项:
- 避免使用 read().splitlines() 或 readlines() 加载超大文件到内存;直接遍历文件对象更高效;
- in 操作符比 str.find() != -1 更简洁、语义清晰且不易出错;
- 如需正则高级匹配(如单词边界 \bholiday\b),可导入 re 模块并使用 re.search(r'\bholiday\b', line, re.I);
- 建议显式指定 encoding="utf-8" 防止中文或特殊字符乱码。
最终,matches 列表即为所有匹配行的集合,可进一步用于分析、导出或批量处理。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











