Вопрос

Я использовал Python разница в библиотеке библиотеку, чтобы найти различия в двух документах.Это делает метод Differ().compare(), но это очень медленный - по крайней мере в 100 раз медленнее для больших HTML-документов по сравнению с разница команда.

Как я могу эффективно определить, где два документа различаются в Python?(В идеале мне нужны позиции, а не фактический текст, который возвращает SequenceMatcher().get_opcodes().)

Это было полезно?

Решение

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

Другие советы

У Google есть библиотека различий для обычного текста с помощью API Python, который должен применяться к html-документам, с которыми вы хотите работать.Я не уверен, подходит ли он для вашего конкретного случая использования, когда вас конкретно интересует расположение различий, но на него стоит взглянуть.

Уродливое и глупое решение:Если diff быстрее, используйте его;через вызов Python через subprocess, проанализируйте вывод команды на наличие необходимой вам информации.Это будет не так быстро, как просто diff, но, возможно, быстрее, чем difflib.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top