首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python项目实战:文件数据对比,小白看了都会,值得收藏

python因为其简单易学,数据开源,并且功能强大,因此受到很多程序员的欢迎,下面我来手把手的教你用python做项目,希望能够帮到各位。

为了方便大家的了解,我对各个函数的功能和代码都加了注释,一般即使没有编程经验的人也能够轻而易举的看懂以下代码(该代码复制后也可以直接运行,不过其中加载的库本地需要安装得有,比如difflib库,win32api等)。

下面简单介绍该项目的内容:该项目是为了实现对文本和excel数据的对比,并将两个文件中不同的部分标记出来。保存到对应的比对结果中,废话不多说,我们来看看对应的代码。具体代码如下:

import sys

import difflib

import win32ui

import xlrd

import xlwt

import win32api,win32con

# =============================================================================

# # 读取配置文件函数

def read_file(file_name):

try:

file_handle = open(file_name, 'r',encoding='ANSI')

text = file_handle.read().splitlines() # 读取后以行进行分割

file_handle.close()

return text

except IOError as error:

print('Read file Error: '.format(error))

sys.exit()

# #打开并获取文件路径1

def getcompFileName1(file1_name):

dlg = win32ui.CreateFileDialog(1) # 1表示打开文件对话框

dlg.SetOFNInitialDir('E:/') # 设置打开文件对话框中的初始显示目录

dlg.DoModal()

filename = dlg.GetPathName() # 获取选择的文件名称

file1_name = filename

return file1_name

# #打开并获取文件路径2

def getcompFileName2(file2_name):

file2_name = filename

return file2_name

# # 比较两个文件并输出html格式的结果

def compare_file(file1_name, file2_name):

if file1_name == "" or file2_name == "":

print('文件路径不能为空:file1_name的路径为:,file2_name的路径为: .'.format(file1_name, file2_name))

text1_lines = read_file(file1_name)

text2_lines = read_file(file2_name)

diff = difflib.HtmlDiff() # 创建htmldiff 对象

result = diff.make_file(text1_lines, text2_lines) # 通过make_file 方法输出 html 格式的对比结果

# 将结果保存到比较结果.html文件中并打开

with open('文本比较结果.html', 'w') as result_file: #同 f = open('文本比对结果.html', 'w') 打开或创建一个比对结果.html文件

result_file.write(result) #同 f.write(result)

win32api.MessageBox(0,"比对结束,结果存放在当前目录的文本比较结果.html中","程序运行结束",win32con.MB_OK)

print ('写入html文件错误:'.format(error))

# # 比较两个excel文件并输出excel格式的结果

# 输入两个excel文件进行比较

def compare_excel(file1_name, file2_name):

open_excel1 = xlrd.open_workbook(file1_name) #用于比较的第一个文件

open_excel2 = xlrd.open_workbook(file2_name)#用于比较的第二个文件

result_excel = xlwt.Workbook() #创建一个文件用来存放比较结果

excel1_name = open_excel1.sheet_names()

comp_restult = result_excel.add_sheet("excel数据比对结果")

tp = open_excel1.sheet_by_name(excel1_name[0]) #打开excel文件中的第一个表格

excel2_name = open_excel2.sheet_names()

tp1 = open_excel2.sheet_by_name(excel2_name[0])

for i in range(tp.nrows):

for j in range(tp.ncols):

if str(tp.cell(i,j).value) != str(tp1.cell(i,j).value): #将两个excel表格中同行同列进行比较

style = xlwt.easyxf('font:bold 1, color blue;') #设置不匹配内容的字体及其颜色

result = str(tp.cell(i,j).value) + "和" + str(tp1.cell(i,j).value) + "不匹配"

comp_restult.write(i, j, result, style)

else:

comp_restult.write(i, j, tp.cell(i,j).value)

result_excel.save('excel比对结果.xls')

win32api.MessageBox(0,"比对结束,结果存放在当前目录的excel比对结果.xls中","程序运行结束",win32con.MB_OK)

# 调用各个函数运行得到对应的结果

if __name__ == "__main__":

file1_name = " "

file1 = getcompFileName1(file1_name)

file2_name = " "

file2 = getcompFileName2(file2_name)

if (file1.endswith('.txt')) and (file2.endswith('.txt')): #在同为文本的时候进行比较

compare_file(file1, file2)

else:

compare_excel(file1, file2) #excel文件比较结果

部分代码示意图:

该项目的部分代码示意图

上述代码变编译后即可运行,具体操作如下:运行后后大约过了3秒钟,会弹出文件选择对话框。

这里需要注意的是,该工具只是针对两个文件都是文本模式或者都是excel模式的文件进行对比,所以选择对比文件的时候不能一个是excel,而另一个是txt文本。目前该工具也只支持文本和excel文件的对比。弹出选择文件的界面如下图:

在弹出的对话框中选择对应的文件

打开两个对比的文件后,软件会自动运行,将两个文件进行对比,对比完成后会有对应的提示,然后单击确定即可。如下图:

运行结束后的对话框

我们打开软件目录,既可以看到比对结果,如下图:

excel数据表比对后结果存放目录

双击打开对应的比对结果,既可以看到标亮的地方就是两个文件不相同的地方,如下图:

excel比对结果示例

文本模式的对比方式类似,只是在最终对比结果中,文本模式转化成了html模式。

这就是今天为大家分享的python项目实战代码,希望大家喜欢!也希望大家多多关注点赞,祝各位生活愉快!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200507A07UNS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券