在Python中使用difflib比较两个.txt文件

101*_*101 21 python difflib

我试图比较两个文本文件并输出比较文件中的第一个字符串,该字符串不匹配但由于我是python的新手而遇到困难.有人可以给我一个使用这个模块的示例方法.

当我尝试这样的事情:

result = difflib.SequenceMatcher(None, testFile, comparisonFile)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,说'file'类型的对象没有len.

Tri*_*ych 33

对于初学者,您需要将字符串传递给difflib.SequenceMatcher,而不是文件:

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

# Or just read the files in
difflib.SequenceMatcher(None, file1.read(), file2.read())
Run Code Online (Sandbox Code Playgroud)

这无论如何都会修复你的错误.为了获得第一个不匹配的字符串,我将引导您进入difflib文档的精彩世界.

  • @OP:除了文档之外,还可以看看Doug Hellmann出色的Python模块本周的difflib条目:http://blog.doughellmann.com/2007/10/pymotw-difflib.html (12认同)
  • @BlackVegetable [网络存档项目链接](https://web.archive.org/web/20130527085140/http://doughellmann.com/2007/10/pymotw-difflib.html) 和 [本周 Python 模块链接](https://pymotw.com/3/difflib/index.html) (2认同)

Vyk*_*yke 9

这是一个使用Python difflib比较两个文件内容的快速示例...

import difflib

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

diff = difflib.ndiff(open(file1).readlines(),open(file2).readlines())
print ''.join(diff),
Run Code Online (Sandbox Code Playgroud)

  • 我们怎么能避免显示相同的线?我只是想要打印不同的行. (3认同)
  • @OlivierCervello导入difflib,sys with open("a")as a:a_content = a.readlines()with open("b")as b:b_content = b.readlines()diff = difflib.unified_diff(a_content,b_content) print("*****Unified diff************")print("行号"+"\ t'+'file1'+'\ t'+'file2') i,行枚举(diff):如果line.startswith(" - "):print(i,'\ t\t'+ line)elif line.startswith("+"):print(i,'\ t\t\t\t\t\t'+''))' (2认同)

RSa*_*bet 5

你确定这两个文件都存在吗?

刚测试它,我得到了一个完美的结果.

为了得到结果,我使用如下:

import difflib

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

try:
    while 1:
        print diff.next(),
except:
    pass
Run Code Online (Sandbox Code Playgroud)

每行的第一个字符表示它们是否不同:例如:'+'表示已添加以下行等.