Question

Je suis en train de comparer deux fichiers texte et la sortie de la première chaîne dans le fichier de comparaison qui ne correspond pas, mais je éprouve des difficultés depuis que je suis très nouveau pour python. Quelqu'un peut-il me donner une s'il vous plaît façon exemple d'utiliser ce module.

Lorsque je tente quelque chose comme:

result = difflib.SequenceMatcher(None, testFile, comparisonFile)

Je reçois un « fichier » erreur indiquant que l'objet de type n'a pas len.

Était-ce utile?

La solution

Pour commencer, vous devez passer des chaînes à 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())

Ça va corriger votre erreur de toute façon. Pour obtenir la première chaîne non correspondant, je vais vous diriger dans le monde merveilleux de la documentation difflib.

Autres conseils

Voici un exemple rapide de comparer le 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 les deux fichiers existent?

Juste testé et j'obtenir un résultat parfait.

Pour obtenir les résultats que j'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: ex .: '+' désigne la ligne suivante a été ajoutée, etc.

On dirait que vous ne pouvez pas besoin difflib du tout. Si vous comparez ligne par ligne, essayer 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 facile de vérifier si deux fichiers texte sont même ligne par ligne. Essayer.

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 en python dans filecmp que vous pouvez utiliser.

import filecmp

fname1 = 'text1.txt'
fname2 = 'text2.txt'

print(filecmp.cmp(fname1, fname2))

:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top