Home >Backend Development >Python Tutorial >MD5 and sha1 of Python generated files

MD5 and sha1 of Python generated files

大家讲道理
大家讲道理Original
2016-11-09 10:46:021661browse

生成文件的MD5和sha1   

#coding=UTF-8
 
def fil_changefileext(filename,extname=''):
    # FIL ChangeFileExt 改变文件扩展名
    # filename    输入的文件路径名
    # extname=''  要更改分扩展名,如 .txt
    import os
    try:
        if extname[0]<>&#39;.&#39;:
            extname=&#39;.&#39;+extname
    except:
        extname=&#39;&#39;
    if os.path.splitext(filename)[1]==&#39;&#39;:
        uouttxt=filename+&#39;.&#39;+extname
    elif os.path.splitext(filename)[1]==&#39;.&#39;:
        uouttxt=filename+extname    
    else:
        uouttxt=filename[:0-len(os.path.splitext(filename)[1])]+extname
    return uouttxt
 
def fil_str2file(fstr,filename):
    # FIL STR2File 把字符串保存到文件 
    try:
        outfile=open(filename,&#39;w&#39;)
        outfile.writelines(fstr)
        outfile.close()
        return True   
    except:
        return False
     
#系统主程序开始
#-------------------------------------------------------
if __name__ == &#39;__main__&#39;:    
    import os,sys,math
    # if len(sys.argv)==1:sys.argv.append(r&#39;c:\FreeNAS-8.0.4-RELEASE-x64.iso&#39;)
    if len(sys.argv)>1:
        filepathname=sys.argv[1]
        if os.path.isfile(filepathname) :
            fmaxs = os.path.getsize(filepathname)+0.00
            fpos = 0.00
            ppos=0 
            pmax=50
            pjy=0         
            fmd5=fil_changefileext(filepathname,&#39;.md5&#39;)
            fsha1=fil_changefileext(filepathname,&#39;.sha&#39;)
            ffm=os.path.basename(filepathname)            
            #开始处理
            print &#39;Program Runing "&#39;+filepathname+&#39;" ...&#39;
            import hashlib
            try:
                umd5str = hashlib.md5()
                usha1str = hashlib.sha1()
                xfilepathname=unicode(filepathname,&#39;utf8&#39;)
                #需要使用二进制格式读取文件内容
                ufile = file(xfilepathname,&#39;rb&#39;)
                while True:
                    datas = ufile.read(1024*512)
                    if not datas: break
                    umd5str.update( datas )
                    usha1str.update( datas )
                    fpos=fpos+1024*512
                    ppos=int(math.floor(fpos / fmaxs * 50))
                    pposbfh=int(math.floor(fpos / fmaxs * 100))
                    #打印进度条
                    if pjy<>ppos: print &#39;[&#39;+&#39;*&#39;*ppos +&#39;=&#39;*(pmax-ppos)+&#39;] &#39;+str(pposbfh) +&#39;%&#39;
                    #打印进度问题未解决,不知道print函数怎么退回到行首覆盖输出,不换行我倒是知道,加个“,”  
                    pjy=ppos 
                uoutstrmd5=str(umd5str.hexdigest())
                uoutstrsha1=str(usha1str.hexdigest())
                ufile.close()
                print &#39;&#39;
                fil_str2file(uoutstrmd5+&#39; *&#39;+ffm+&#39;\n&#39;,fmd5)
                fil_str2file(uoutstrsha1+&#39; *&#39;+ffm+&#39;\n&#39;,fsha1)
                print &#39;Task is completed !&#39; + r&#39; [ XingHe Studio File to MD5 and SHA1 ]&#39;               
            except:        
                print &#39;Error !&#39; + r&#39; [ XingHe Studio File to MD5 and SHA1 ]&#39;
        else:
            print &#39;File "&#39;+filepathname+&#39;" not exist!&#39;+ r&#39; [ XingHe Studio File to MD5 and SHA1 ]&#39;
    else:
        print  r&#39; [ XingHe Studio File to MD5 and SHA1 ]&#39;


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn