4

我一直在使用 Python difflib库来查找 2 个文档的不同之处。Differ().compare() 方法执行此操作,但它非常慢 - 与diff命令相比,大型 HTML 文档至少慢 100 倍。

如何有效地确定 2 个文档在 Python 中的不同之处?(理想情况下,我关注的是位置而不是实际的文本,这就是 SequenceMatcher().get_opcodes() 返回的内容。)

4

3 回答 3

3
a = open("file1.txt").readlines()
b = open("file2.txt").readlines()
count = 0
pos = 0

while 1:
    count += 1
    try:
        al = a.pop(0)
        bl = b.pop(0)
        if al != bl:
            print "files differ on line %d, byte %d" % (count,pos)
        pos += len(al)
    except IndexError:
        break
于 2010-01-04T12:30:02.623 回答
2

Google 有一个带有 python API 的纯文本差异库,它应该适用于您要使用的 html 文档。我不确定它是否适合您对差异位置特别感兴趣的特定用例,但值得一看。

于 2010-01-04T13:13:00.787 回答
1

一个丑陋而愚蠢的解决方案:如果diff更快,请使用它;通过来自 python via 的调用subprocess,解析命令输出以获取您需要的信息。这不会像刚才那样快diff,但可能比difflib.

于 2010-01-04T12:18:52.907 回答