我想比较两个文本文件和输出的比较文件不匹配的第一个字符串,但我有困难的,因为我很新的蟒蛇。任何人都可以给我使用这个模块的样品的方式。

当我尝试类似:

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

,否则,有在python一个预定义的文件中filecmp您可以使用。

import filecmp

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

print(filecmp.cmp(fname1, fname2))

:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top