繁体   English   中英

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

[英]How to compare two HTML files in python and print only the differences?

我有两个从声纳生成的 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)

现在这给了我一个比较.html,它只是两个 html 差异。 不只打印不同的行。

我应该尝试 HTML 解析,然后以某种方式将差异打印出来吗? 请建议。

如果你使用difflib.Differ ,你可以只保留不同的行,并通过在每一行上写的两个字母代码进行过滤。 文档

类 difflib.Differ

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

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

代码含义

'-' 序列 1 独有的行

序列 2 独有的“+”行

' ' 两个序列共有的行

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

以“?”开头的行试图将眼睛引导到线内差异,并且在任一输入序列中都不存在。 如果序列包含制表符,这些行可能会令人困惑

通过保持以 '- ' 和 '+ ' 开头的行只是差异。

我将首先尝试逐行遍历每个 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'))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM