使用python 3.2检测和打印两个文本文件之间的差异

may*_*ank 0 python python-3.x

我一直在尝试用 python 编写一个程序来读取两个文本文件并打印它们文本中的差异。这两个文件除了行号之外是相似的,由于插入了一些注释而不同。我尝试过使用 difflib模块,但它给了我错误。

import difflib
from difflib import *

temp3=[]
temp4=[]
with open ("seqdetect",'r') as f:
    with open ("seqdetect_2",'r') as g:
        for item in f:
            temp1 =item.split()
            temp3.append(temp1)

        for items in g:
            temp2 =items.split()
            temp4.append(temp2)
        d = difflib.Differ()
        diff = d.compare(temp3, temp4)
        print ('\n'.join(diff))
Run Code Online (Sandbox Code Playgroud)

你能否提出一个替代方案。问候, 玛雅克

Blc*_*ght 5

好的,我已经尝试了您的代码并发现了问题。

Differ.compare()方法期望得到两个字符串列表,代表两个文本的行。但是,由于您的item.split()调用,您的列表temp3temp4列表都是(一个字符长)字符串列表。

我不确定你到底想用那个拆分做什么,所以我不确定最好的解决方法是什么。如果您确实希望它告诉您已添加或删除的单个字符,您可以在两个 for 循环append()中用 with替换您的调用extend()。但坦率地说,这似乎不是很有用。

分裂更有可能是一个错误。而不是循环遍历文件中的行,只需使用将它们全部读入列表readlines()并让差异对它们进行处理即可。

with open("seqdetect") as f, open("seqdetect_2") as g:
    flines = f.readlines()
    glines = g.readlines()

    d = difflib.Differ()
    diff = d.compare(flines, glines)
    print("\n".join(diff))
Run Code Online (Sandbox Code Playgroud)

如果您想对什么算作差异(忽略空格差异或其他)进行一些过滤,您应该浏览difflib 文档,并传递适当的函数作为Differ 构造函数的linejunkcharjunk参数。