1:获取当前目录下所有文件,然后做如下处理:
1)文件名去重复。
2)选出文件大于10m的
3)获取到文件的md5值,然后利用这个md5值对文件名进行重命名(其中md5代表一个文件属性)
4)打印出最后的符合条件的所有文件名
温馨提示:
1)我们是要获取所有的文件 而不是目录
2)去重复不是删除文件,而是对重复的文件名进行重命名
3)想办法获取文件的md5值
4)最好是函数的形式实现哦
1 import os 2 import hashlib 3 4 allfiles = [] 5 tempdict = {} 6 end_file = [] 7 8 9 class GetFlie: 10 def __init__(self, dirpath): 11 self.dirpath = dirpath 12 13 def get_all_file(self, ): 14 # 通过os.walk获取目录下的所有文件名 15 for root, dirs, files in os.walk(self.dirpath): 16 for file in files: 17 # 判断size 18 size = os.path.getsize(os.path.join(root, file)) 19 if size <= 10485760: 20 # 文件名添加到allfiles列表里 21 allfiles.append(os.path.join(root, file)) 22 # 重命名 23 for i in range(len(allfiles)): 24 # 如果md5在字典的key已存在 25 if self.get_md5(allfiles[i]) in tempdict.keys(): 26 tempdict[self.get_md5(allfiles[i]) + str(i)] = allfiles[i].split(".")[0] + str(i) + "." + allfiles[i].split(".")[-1] 27 else: 28 tempdict[self.get_md5(allfiles[i])] = allfiles[i] 29 # 最后的文件 30 for file in tempdict.values(): 31 end_file.append(file) 32 33 return end_file 34 35 @staticmethod 36 def get_md5(filename): 37 f = open(filename, 'rb') 38 m1 = hashlib.md5() # 获取一个md5加密算法对象 39 m1.update(f.read()) # 读取文件,制定需要加密的字符串 40 hash_code = m1.hexdigest() # 获取加密后的16进制字符串 41 f.close() 42 md5 = str(hash_code).lower() 43 return md5 44 45 46 if __name__ == '__main__': 47 path = r'I:lesson_practice ool' 48 print(GetFlie(path).get_all_file())