Déterminer où les documents diffèrent avec Python
-
22-09-2019 - |
Question
J'utilise la bibliothèque Python difflib pour trouver où 2 documents diffèrent. La méthode Differ () comparer () le fait, mais il est très lent -. Atleast 100x plus lent pour les grands documents HTML par rapport à la la commande diff.
Comment puis-je déterminer efficacement où 2 documents diffèrent en Python? (Idéalement, je suis après les positions plutôt le texte actuel, qui est ce qui rend SequenceMatcher (). Get_opcodes ().)
La solution
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
Autres conseils
Google dispose d'une bibliothèque diff pour le texte brut avec API python, qui devrait appliquer aux documents HTML que vous voulez travailler avec. Je ne sais pas si elle est adaptée à votre cas d'utilisation particulière où vous êtes particulièrement intéressé à l'emplacement des différences, mais il est utile d'avoir un coup d'oeil.
Une solution laide et stupide: Si diff
est plus rapide, utilisez-le; à travers un appel de python via subprocess
, analyser la sortie de commande pour les informations dont vous avez besoin. Ce ne sera pas aussi vite que juste diff
, mais peut-être plus rapide que difflib
.