Domanda

Sto cercando di confrontare due file di testo e di uscita la prima stringa nel file di confronto che non corrisponde, ma sto avendo difficoltà poiché sono molto nuovo a Python. Qualcuno può per favore mi dia un modo di esempio per utilizzare questo modulo.

Quando cerco qualcosa di simile:

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

ottengo un errore che dice oggetto di 'file' tipo non ha len.

È stato utile?

Soluzione

Per cominciare, è necessario passare stringhe in difflib.SequenceMatcher, non file:

# Like so
difflib.SequenceMatcher(None, str1, str2)

# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())

Che sarà risolvere il tuo errore comunque. Per ottenere la prima stringa non corrispondente, vi rimando direttamente al meraviglioso mondo di difflib documentazione.

Altri suggerimenti

Ecco un rapido esempio di confronto tra il contenuto di due file utilizzando Python difflib ...

import difflib

file1 = "myFile1.txt"
file2 = "myFile2.txt"

diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines())
print ''.join(diff),

Sei sicuro che esistono entrambi i file?

appena provato e ottenere un risultato perfetto.

Per ottenere i risultati che uso qualcosa come:

import difflib

diff=difflib.ndiff(open(testFile).readlines(), open(comparisonFile).readlines())

try:
    while 1:
        print diff.next(),
except:
    pass

il primo carattere di ogni riga indica se sono diversi: ad es .: '+' significa è stata aggiunta la seguente riga, ecc.

Sembra che potrebbe non essere necessario difflib affatto. Se si sta confrontando linea per linea, provare qualcosa di simile:

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!"

Un altro metodo più semplice per controllare se due file di testo sono gli stessi riga per riga. Provalo.

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()

In caso contrario, v'è un file predefinito in python in filecmp che si può usare.

import filecmp

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

print(filecmp.cmp(fname1, fname2))

:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top