python比较两个文件中内容的不同之处, 并输出行号和内容

2022-09-18 08:35:57
'''cmpfile.py - 比对两个文件, 如果有不同之处, 打印内容和行号'''
 
import os
 
class cmpFile:
 
    def __init__(self, file1, file2):
        self.file1 = file1
        self.file2 = file2
 
    def fileExists(self):
        if os.path.exists(self.file1) and \
                os.path.exists(self.file2):
            return True
        else:
            return False
 
    # 对比文件不同之处, 并返回结果
    def compare(self):
        if cmpFile(self.file1, self.file2).fileExists() == False:
            return []
 
        fp1 = open(self.file1)
        fp2 = open(self.file2)
        flist1 = [i for i in fp1]
        flist2 = [x for x in fp2]
        fp1.close()
        fp2.close()
        flines1 = len(flist1)
        flines2 = len(flist2)
 
        if flines1 < flines2:
            flist1[flines1:flines2+1] = ' ' * (flines2 - flines1)
        if flines2 < flines1:
            flist2[flines2:flines1+1] = ' ' * (flines1 - flines2)
 
        counter = 1
        cmpreses = []
        for x in zip(flist1, flist2):
            if x[0] == x[1]:
                counter +=1
                continue
            if x[0] != x[1]:
                cmpres = '%s和%s第%s行不同, 内容为: %s --> %s' % \
                         (self.file1, self.file2, counter, x[0].strip(), x[1].strip())
                cmpreses.append(cmpres)
                counter +=1
        return cmpreses
 
if __name__ == '__main__':
    cmpfile = cmpFile('a1.txt', 'a2.txt')
    difflines = cmpfile.compare()
    for i in difflines:
        print(i, end='\n')

以上文件针对txt文件。

但是我对比的是python文件

我对比的是py文件。为了使用该程序,将*.py文件改为*.txt文件

结果报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 338: illegal multibyte sequence等相关错误。

错误地点:

        fp1 = open(self.file1)
        fp2 = open(self.file2)

我猜应该是打开文件的权限和文件缩进有问题。

将上面的代码改为:

fp1 = open(self.file1,"r",encoding='UTF-8')
fp2 = open(self.file2,"r",encoding='UTF-8')

运行成功。

  • 作者:Vertira
  • 原文链接:https://blog.csdn.net/Vertira/article/details/122804684
    更新时间:2022-09-18 08:35:57