파이썬에서 difflib를 사용하여 두 개의 .txt 파일을 비교합니다

StackOverflow https://stackoverflow.com/questions/977491

  •  13-09-2019
  •  | 
  •  

문제

두 개의 텍스트 파일을 비교하고 비교 파일에서 첫 번째 문자열을 출력하려고하지만 파이썬을 처음 접했기 때문에 어려움이 있습니다. 누구 든지이 모듈을 사용하는 샘플 방법을 알려줄 수 있습니까?

내가 같은 것을 시도 할 때 :

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

'파일'유형의 객체에 LEN이 없다는 오류가 발생합니다.

도움이 되었습니까?

해결책

우선, 파일이 아닌 difflib.sequencematcher에 문자열을 전달해야합니다.

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

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

어쨌든 당신의 오류를 해결할 것입니다. 첫 번째 비 일치 문자열을 얻으려면 멋진 세상으로 안내 할 것입니다. difflib 문서.

다른 팁

다음은 Python difflib를 사용하여 두 파일의 내용을 비교하는 빠른 예입니다.

import difflib

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

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

두 파일이 모두 존재합니까?

방금 테스트하면 완벽한 결과를 얻습니다.

결과를 얻으려면 다음과 같은 것을 사용합니다.

import difflib

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

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

각 줄의 첫 번째 문자는 다른지를 나타냅니다. 예를 들어 : '+'는 다음 줄이 추가되었음을 의미합니다.

difflib가 전혀 필요하지 않을 것 같습니다. 라인별로 비교하는 경우 다음과 같은 것을 시도하십시오.

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

두 개의 텍스트 파일이 한 줄씩 동일한 지 확인하는 또 다른 쉬운 방법. 시도해보십시오.

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

그렇지 않으면 FileCMP의 Python에 사전 정의 된 파일이 있습니다.

import filecmp

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

print(filecmp.cmp(fname1, fname2))

:)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top