Python如何实现两个文本文件比对 提取匹配内容写入新文件
Python双文本文件逐行匹配入门实现方案
核心实现思路
你已经掌握单文件读取操作的话,跨文件比对不需要额外学复杂的第三方库,用Python内置的文件操作就能实现,核心逻辑拆成3个非常好理解的步骤:
- 先读取被检索的第二个文件的所有有效内容,清理格式后存入集合结构——集合的元素查找时间复杂度是O(1),比用列表存快几个量级,文件越大优势越明显
- 逐行读取待匹配的第一个文件,每读一行就做同样的格式清理,判断该行内容是否存在于刚才的集合中
- 匹配成功的行直接写入新的结果文件即可,写完所有行后自动关闭文件句柄就完成了
可直接运行的参考代码
全程用Python内置方法实现,不需要安装任何第三方依赖:
# 按需修改为你自己的文件路径 SOURCE_PATH = "第一个待匹配文件.txt" TARGET_PATH = "第二个被检索文件.txt" RESULT_PATH = "匹配结果.txt" # 读取被检索文件的所有有效行存入集合 target_content = set() with open(TARGET_PATH, "r", encoding="utf-8") as f: for raw_line in f: # 去掉每行首尾的换行符、多余空格,规避格式差异导致的匹配失败 clean_line = raw_line.strip() if clean_line: # 跳过空行 target_content.add(clean_line) # 逐行匹配并写入结果 with open(SOURCE_PATH, "r", encoding="utf-8") as f_source, \ open(RESULT_PATH, "w", encoding="utf-8") as f_result: for raw_line in f_source: clean_line = raw_line.strip() if clean_line and clean_line in target_content: # 写入时补换行符,避免结果内容挤在同一行 f_result.write(f"{clean_line}\n")
入门常见问题调整方案
- 打开文件报编码错误:把代码里的
encoding="utf-8"替换为encoding="gbk"即可适配Windows系统默认生成的txt文件 - 需要模糊匹配:如果不需要整行完全一致,只要第二个文件的某一行包含当前待匹配字符串,就把判断逻辑替换为子串判断即可,注意这种场景下集合查找的优势不生效,适合文件体量不大的场景
- 不需要清理空格:如果你的匹配逻辑要求严格匹配首尾空格、换行,把所有
.strip()调用去掉即可 - 大文件场景:如果两个文件行数都在十万级以上,当前用集合存储目标内容的方案依然适用,内存占用远低于列表存储,不需要额外做分块读取优化
内容的提问来源于stack exchange,提问作者Edward Wynman
相关产品推荐
相关产品推荐

