python,文件md5校验

先上图,左边是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('复制失败')

就是这么简单,自己试一下吧

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值