J'essaie de comparer deux fichiers texte et de sortir la première chaîne du fichier de comparaison qui ne correspond pas, mais j'ai des difficultés car je suis très nouveau sur python. Quelqu'un peut-il me donner un exemple d'utilisation de ce module?.
Quand j'essaye quelque chose comme:
result = difflib.SequenceMatcher(None, testFile, comparisonFile)
Je reçois une erreur disant que l'objet de type "fichier" n'a pas de len.
Pour commencer, vous devez passer des chaînes à difflib.SequenceMatcher, pas des fichiers:
# Like so
difflib.SequenceMatcher(None, str1, str2)
# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())
De toute façon, cela corrigera votre erreur. Pour obtenir la première chaîne non correspondante, je vais vous diriger 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?
Je viens de le tester et j'obtiens un résultat parfait.
Pour obtenir les résultats, j'utilise 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 que la ligne suivante a été ajoutée, etc.
Il semble que vous n'ayez pas besoin du tout de difflib. Si vous comparez 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!"
Une autre méthode plus simple pour vérifier si deux fichiers texte sont identiques ligne par ligne. Essaye le.
fname1 = 'text1.txt'
fname2 = 'text2.txt'
f1 = open(fname1)
f2 = open(fname2)
lines1 = f1.readlines()
lines2 = f2.readlines()
i = 0
f1.seek(0)
f2.seek(0)
for line1 in f1:
if lines1[i] != lines2[i]:
print(lines1[i])
exit(0)
i = i+1
print("both are equal")
f1.close()
f2.close()
sinon, il y a un fichier prédéfini dans python dans filecmp que vous pouvez utiliser.
import filecmp
fname1 = 'text1.txt'
fname2 = 'text2.txt'
print(filecmp.cmp(fname1, fname2))
:)