【学习】小文件的MD5校验

实现小文件的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)

猜你喜欢

转载自www.cnblogs.com/i-orange/p/9338560.html
今日推荐