You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python对比两文件提取差异字符串存入可迭代对象的方法

实现方法

你当前用的difflib.HtmlDiff是专门生成可视化HTML报告的接口,要拿到结构化的差异内容、提取第二个文件的新增内容,直接用difflib内置的行比对接口即可,不需要生成HTML文件。

核心规则

difflib文本比对返回的每一行结果会带前缀标记,对应不同差异类型:

  • 前缀为 (两个空格):两个文件共有的相同行
  • 前缀为- :仅第一个文件存在、第二个文件已删除的行
  • 前缀为+ :仅第二个文件存在的新增/修改后行
  • 前缀为? :行内字符级差异的提示行,提取内容时可直接忽略

可直接运行的代码

import difflib

# 用with上下文管理读写文件,避免句柄泄漏
with open('first_file', encoding='utf-8') as f:
    first_file_lines = f.readlines()
with open('second_file', encoding='utf-8') as f:
    second_file_lines = f.readlines()

# 生成逐行比对结果
diff_iter = difflib.Differ().compare(first_file_lines, second_file_lines)

# 提取第二个文件的所有新增内容,存入列表(可迭代对象)
added_lines = []
for line in diff_iter:
    if line.startswith('+ '):
        # 去掉前缀标记,按需保留或去除末尾换行符
        added_lines.append(line[2:].rstrip('\n'))

# 校验目标字符串是否存在于新增内容中
target_string = "需要校验的指定字符串"
is_target_in_added = any(target_string in line for line in added_lines)

其他可选实现思路

  • 大文件场景:如果两个文件体积很大,不适合全量读入内存,可以逐行流式读取比对,也可以使用diff-match-patch库提升大文本、细粒度差异的比对效率
  • 轻量快速校验场景:如果不需要识别行内修改、不关心行顺序,可以直接将第一个文件的所有行存入集合,遍历第二个文件的行判断是否不在集合中,即可快速筛选出新增行,代码更简洁,性能更高

内容的提问来源于stack exchange,提问作者some questions

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:31:02