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.

19
demandé sur kame 2009-06-10 22:51:20

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.

28
répondu Triptych 2009-06-10 19:16:57

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),
6
répondu Vyke 2014-02-14 22:18:55

Ê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.

5
répondu RSabet 2009-06-11 09:33:02

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!"
3
répondu Filip Salomonsson 2009-06-10 19:39:59