先上图,左边是hashmyfiles专业校验md5码的工具,右图是我用tk写的小工具,可校验md5和sha1值
下图更新了,md5修改功能,为了不破坏源文件,做了复制文件的处理
thinter代码如下
from tkinter import Label,Tk,StringVar,messagebox
from tkinter.filedialog import askopenfilename
from tkinter.ttk import Entry,Button
from md5校验.md5_test import md5_check,change_md5
class App(object):
def __init__(self):
self.w=Tk()
self.w.title('md5校验与修改')
self.w.geometry('360x400')
self.make_res()
self.res_config()
self.w.mainloop()
def make_res(self):
self.E_var=StringVar()
self.L_file=Label(self.w,fg='red')
self.E_file=Entry(self.w,textvariable=self.E_var)
self.B_choose=Button(self.w,text='选择')
self.L_md5_message=Label(self.w,bg='#C6E2FF')
self.L_md5_info=Label(self.w,text='MD5:',fg='#B03060')
self.L_sha1_message=Label(self.w,bg='#C6E2FF')
self.L_sha1_info=Label(self.w,text='SHA1:',fg='#1874CD')
self.B_change=Button(self.w,text='修改MD5')
self.L_new_md5_message = Label(self.w, bg='#C6E2FF')
self.L_new_md5_info = Label(self.w, text='MD5:', fg='#B03060')
self.L_new_sha1_message = Label(self.w, bg='#C6E2FF')
self.L_new_sha1_info = Label(self.w, text='SHA1:', fg='#1874CD')
self.L_new_message=Label(self.w,bg='#7EC0EE')
self.L_new_info=Label(self.w,text='复制:',fg='red')
self.res_place()#设置坐标
def res_place(self):
self.L_file.place(x=50,y=5,width=200,height=30)
self.E_file.place(x=50,y=40,width=230,height=30)
self.B_choose.place(x=300,y=40,width=50,height=30)
self.L_md5_message.place(x=50,y=80,width=300,height=30)
self.L_md5_info.place(x=5,y=80,width=32,height=30)
self.L_sha1_message.place(x=50,y=120,width=300,height=30)
self.L_sha1_info.place(x=5,y=120,width=32,height=30)
self.B_change.place(x=50,y=160,width=70,height=30)
self.L_new_md5_message.place(x=50,y=230,width=300,height=30)
self.L_new_md5_info.place(x=5,y=230,width=32,height=30)
self.L_new_sha1_message.place(x=50,y=270,width=300,height=30)
self.L_new_sha1_info.place(x=5,y=270,width=32,height=30)
self.L_new_message.place(x=50,y=195,width=300,height=30)
self.L_new_info.place(x=5,y=195,width=40,height=30)
def res_config(self):
self.L_file.config(text='请选择文件或者输入文件路径')
self.B_choose.config(command=self.select_config)
self.B_change.config(command=self.change_file_md5)
def select_config(self):#如果路径非空,直接执行校验,路径报错弹出警告
if self.E_var.get()!='':
self.view_md5()
else:
self.file_path=askopenfilename()
self.E_var.set(self.file_path)
self.view_md5()
def view_md5(self):#显示md5码
try:
md5_str,sha1_str=md5_check(self.E_var.get())
self.L_md5_message.config(text=md5_str)
self.L_sha1_message.config(text=sha1_str)
print('md5:',md5_str)
print('sha1:',sha1_str)
except Exception:
messagebox.showwarning(title='警告',message='请选择正确的文件')
def change_file_md5(self):
print('修改')
if self.E_var.get()=='':
messagebox.showwarning(title='警告',message='请选择文件')
else:
try:
md5_check(self.E_var.get())
new_file_name, md5_str, sha1_str=change_md5(self.E_var.get())
self.L_new_message.config(text=new_file_name)
self.L_new_md5_message.config(text=md5_str)
self.L_new_sha1_message.config(text=sha1_str)
except Exception:
messagebox.showwarning(title='警告', message='请选择正确的文件')
a=App()
md5文件校验部分
def copy_file(file_path):
#先复制文件,避免源文件损坏,存放同级目录下
new_file_name=os.path.split(file_path)[0]+'\\'+'copy_'+os.path.split(file_path)[1]
print(new_file_name)
# fw = open(new_file_name, 'w')
# flag=True
try:
with open(file_path,'rb') as fr,open(new_file_name, 'wb') as fw:
while True:
data=fr.read(1024)
if not data:
break
fw.write(data)
print('复制完毕')
flag=True
return flag,new_file_name
except Exception:
print('读写失败 ')
flag=False
return flag,new_file_name
def change_md5(file_path):
flag,new_file_name=copy_file(file_path)
if flag:
m=open(new_file_name,'a')
m.write('@@@@')
m.close()
md5_str, sha1_str=md5_check(new_file_name)
return new_file_name,md5_str,sha1_str
else:
print('复制失败')
就是这么简单,自己试一下吧