La comparaison de deux.fichiers TXT utilisant difflib en Python
j'essaie de comparer deux fichiers texte et de sortir la première chaîne dans le fichier de comparaison qui ne correspond pas mais j'ai des difficultés car je suis très nouveau en python. Quelqu'un peut-il me donner un exemple d'utilisation de ce module?
Quand j'essaie quelque chose comme:
result = difflib.SequenceMatcher(None, testFile, comparisonFile)
j'obtiens une erreur disant que l'objet de type 'file' n'a pas de len.
4 réponses
pour commencer, vous devez passer des cordes à difflib.SequenceMatcher, pas les fichiers:
# Like so
difflib.SequenceMatcher(None, str1, str2)
# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())
cela corrigera votre erreur de toute façon. Pour obtenir la première chaîne non-assortie, je vous dirigerai vers le monde merveilleux de documentation difflib.
voici un exemple rapide de comparaison du contenu de deux fichiers en utilisant Python difflib...
import difflib
file1 = "myFile1.txt"
file2 = "myFile2.txt"
diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines())
print ''.join(diff),
Êtes-vous sûr que les deux fichiers existent ?
Juste testé et j'obtiens un résultat parfait.
Pour obtenir les résultats que j'ai utiliser quelque chose comme:
import difflib
diff=difflib.ndiff(open(testFile).readlines(), open(comparisonFile).readlines())
try:
while 1:
print diff.next(),
except:
pass
le premier caractère de chaque ligne indique si elles sont différentes: par exemple.: '+' signifie la ligne suivante a été ajoutée, etc.
on dirait que vous n'avez pas besoin de difflib. Si vous êtes de comparer, ligne par ligne, essayez quelque chose comme ceci:
test_lines = open("test.txt").readlines()
correct_lines = open("correct.txt").readlines()
for test, correct in zip(test_lines, correct_lines):
if test != correct:
print "Oh no! Expected %r; got %r." % (correct, test)
break
else:
len_diff = len(test_lines) - len(correct_lines)
if len_diff > 0:
print "Test file had too much data."
elif len_diff < 0:
print "Test file had too little data."
else:
print "Everything was correct!"