欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-07-14

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

运行成功。 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。