如何在Python中比较两个HTML文件并仅打印差异?

问题描述 投票:0回答:2

我有两个由声纳生成的 HTML 报告,显示了我的代码中的问题。

问题陈述:我需要比较两个声纳报告并找出差异,即引入的新问题。基本上需要找到 html 中的差异并仅打印这些差异。

我尝试了一些事情:

import difflib
file1 = open('sonarlint-report.html', 'r').readlines()
file2 = open('sonarlint-report_latest.html', 'r').readlines()

htmlDiffer = difflib.HtmlDiff()
htmldiffs = htmlDiffer.make_file(file1, file2)

with open('comparison.html', 'w') as outfile:
    outfile.write(htmldiffs)

现在这给了我一个 Comparison.html,它只不过是两个 html diff。不只打印不同的行。

我应该尝试 HTML 解析,然后以某种方式获取差异并打印出来吗?

python html comparison
2个回答
3
投票

如果您使用

difflib.Differ
,您可以仅保留差异行,并通过每行上写入的两个字母代码进行过滤。来自文档

类 difflib.Differ

这是一个用于比较线序列的类 文本,并产生人类可读的差异或增量。不同 使用 SequenceMatcher 来比较行的序列,并 比较相似(接近匹配)行中的字符序列。

Differ delta 的每一行都以两个字母的代码开头:

代码含义

'-' 序列 1 特有的行

'+' 序列特有的行 2

“ ”线是两个序列共有的

'? ' 任一输入序列中都不存在该行

以“?”开头的线条试图引导视线在内线 差异,并且不存在于任一输入序列中。这些 如果序列包含制表符,行可能会造成混乱

保持以“-”和“+”开头的行只是区别。


0
投票

我首先尝试逐行迭代每个 html 文件并检查行是否相同。

with open('file1.html') as file1, open('file2.html') as file2:
    for file1Line, file2Line in zip(file1, file2):
        if file1Line != file2Line:
            print(file1Line.strip('\n'))
            print(file2Line.strip('\n'))

您必须处理换行符和连续的多行差异,但这可能是一个好的开始:)

© www.soinside.com 2019 - 2024. All rights reserved.