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项目实战代码,希望大家喜欢!也希望大家多多关注点赞,祝各位生活愉快!
领取专属 10元无门槛券
私享最新 技术干货