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

Python对比两个HTML文件 仅提取输出新增/缺失文本实现问题

代码调整方案

你当前使用的HtmlDiff.make_file()会默认生成包含所有上下文行的完整对比页面,要仅提取新增、缺失文本,可按以下两种场景调整:

方案1:输出仅含增删内容的纯文本结果

适合不需要保留HTML格式,仅需提取差异内容的场景:

import difflib

first_file = ".../file1.html"
second_file = ".../file2.html"

# 读取文件时指定编码避免乱码
with open(first_file, 'r', encoding='utf-8') as f:
    first_file_lines = f.readlines()
with open(second_file, 'r', encoding='utf-8') as f:
    second_file_lines = f.readlines()

# 获取差分结果
diff_lines = difflib.ndiff(first_file_lines, second_file_lines)
# 仅过滤增删行:- 代表旧文件有、新文件没有(缺失),+ 代表新文件有、旧文件没有(新增)
only_changes = [line for line in diff_lines if line.startswith(('+', '-'))]

# 写入结果
with open(".../only_changes.txt", 'w', encoding='utf-8') as f:
    f.writelines(only_changes)

方案2:输出仅含增删内容的HTML格式报告

如果需要保留HTML可视化格式,仅移除无差异的上下文行:

import difflib
from bs4 import BeautifulSoup # 需先安装依赖:pip install beautifulsoup4

first_file = ".../file1.html"
second_file = ".../file2.html"

with open(first_file, 'r', encoding='utf-8') as f:
    first_lines = f.readlines()
with open(second_file, 'r', encoding='utf-8') as f:
    second_lines = f.readlines()

# 先生成完整的HtmlDiff报告
full_diff = difflib.HtmlDiff().make_file(first_lines, second_lines, first_file, second_file)
soup = BeautifulSoup(full_diff, 'html.parser')

# 过滤掉无差异的行(HtmlDiff生成的差异表中,无差异行class为none,增删行class分别为add、remove)
for tr in soup.find_all('tr', class_='none'):
    tr.decompose()

# 写入处理后的HTML
with open(".../only_changes_diff.html", 'w', encoding='utf-8') as f:
    f.write(str(soup))

补充说明

  • 如果需要保留少量上下文方便定位,可以把方案1的difflib.ndiff替换为difflib.unified_diff,指定n参数即可设置上下文行数
  • 两种方案处理1MB大小的HTML文件均无性能问题,无需额外优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:48:04