实现小文件的md5校验,请不要尝试用该代码校验大文件的md5!
1 #!python3 2 #coding:utf-8 3 4 ''' 5 This module is coded by Yuning Ju 6 7 Copyright 2018 Yuning Ju 8 9 实现:MD5校验 10 11 ''' 12 import os, hashlib 13 14 def walk(dirname): 15 ''' 16 Find the files in dir and its subdirs 17 18 ''' 19 names = [] 20 try: 21 for name in os.listdir(dirname): 22 path = os.path.join(dirname,name) 23 24 if os.path.isfile(path): 25 names.append(path) 26 else: 27 names.extend(walk(path)) #递归 28 29 return names 30 31 except NotADirectoryError: 32 names.append(dirname) 33 return names 34 35 def md5_check(filename): 36 ''' 37 Calculate the md5 of files, just for small-size files 38 39 ''' 40 fp = open(filename,'rb') 41 fr = fp.read() 42 fp.close() 43 fmd5 = hashlib.md5(fr).hexdigest() 44 return fmd5 45 46 def check_suffix(dirname,suffix): 47 names = walk(dirname) 48 d = {} 49 for name in names: 50 if name.endswith(suffix): 51 fmd5 = md5_check(name) 52 if fmd5 in d: 53 d[fmd5].append(os.path.basename(name)) 54 else: 55 d[fmd5] = [os.path.basename(name)] 56 return d 57 58 59 if __name__ == '__main__': 60 dirname = input('请输入文件夹或文件路径:') 61 d = check_suffix(dirname,'.pdf') 62 for i,v in d.items(): 63 # 返回md5码 重复文件个数 重复文件文件名 64 print(i,len(v),v)