Python提取文本匹配行并保存的代码运行无输出问题咨询
问题排查与代码修正
现有代码的核心问题
- 文件操作缩进错误:
main函数中读取emailusernames.txt的with语句块结束后,文件句柄file_in会自动关闭,后续的for line in file_in无法读取到任何内容,列表lines始终为空 - 变量未定义:代码中使用的
username变量没有做任何声明和赋值,运行会直接报错 - 逻辑缺失:缺少对第二个待搜索文件的读取逻辑、匹配到内容后写入第三个文件的逻辑,额外定义的
count()函数没有实际作用,完全不需要调用 - 匹配逻辑错误:原逻辑只做了单关键词匹配,没有遍历第一个文件里的所有关键词做判断
修正后的完整可运行代码
def main(): # 配置三个文件路径,可按需修改 keyword_file = "emailusernames.txt" # 第一个文件:存储所有待匹配关键词 search_file = "target.txt" # 第二个文件:需要从中查找匹配行的目标文件 output_file = "result.txt" # 第三个文件:保存最终匹配结果 # 1. 读取第一个文件的所有关键词,去掉首尾空白/换行符,过滤空行 keywords = [] with open(keyword_file, 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() if stripped_line: keywords.append(stripped_line) # 2. 遍历第二个文件的每一行,匹配任意关键词就写入第三个文件 with open(search_file, 'r', encoding='utf-8') as f_search, open(output_file, 'w', encoding='utf-8') as f_out: for line in f_search: if any(keyword in line for keyword in keywords): f_out.write(line) # 需要控制台同步打印可取消下一行注释 # print(line.strip()) if __name__ == "__main__": main()
使用说明
- 把代码里的
target.txt替换为你实际要搜索的第二个文件的路径 - 如果文件编码不是utf-8,可以修改
open函数里的encoding参数,比如中文Windows系统常用gbk编码 - 如果需要忽略大小写匹配,可以把判断条件改为
any(keyword.lower() in line.lower() for keyword in keywords)
内容的提问来源于stack exchange,提问作者zxl
相关产品推荐
相关产品推荐

