本系列旨在通过一系列由浅入深的python实战代码或项目,使普通人也能感受到编程的乐趣,编程能够在平时的工作生活上有所帮助。欢迎查看系列的开篇词和前面文章。
重复文件占用磁盘空间,尤其是微信的文件,一个转发就会多出一个重复文件,一个个来手工查看并删除十分费力。所以分享一个python的实用脚本文件,根据文件的hash值来判断文件是否相同,相同即可删除,节省磁盘空间。
文件名不影响对hash的计算。
可以把哈希值简单地理解成是一段数据(某个文件,或者是字符串)的DNA,或者身份证。
通过一定的哈希算法,将一段较长的对象映射为较短小的hash值,hash的特点是唯一的,一旦对象发生了变化,哪怕是一个微小的变化,他的哈希值也会发生变化。另外一方面,没有两个数据的哈希值是完全相同的。
基于hash唯一性的特点,常常用来判断两个文件是否相同。代码的程序结构是:
具体代码
import hashlibimport os#通过对文件的hash值比较来判断是否 重复def hashFile(filename): #对于大文件,如果一起读取,可能会导致内存溢出,因此我们一次读取一个块大小 BLOCKSIZE = 65536 hasher = hashlib.md5() with open(filename, 'rb') as file: # 从文件中读取特定的块大小 buf = file.read(BLOCKSIZE) while(len(buf) > 0): hasher.update(buf) buf = file.read(BLOCKSIZE) return hasher.hexdigest()if __name__ == "__main__": # 用于存储哈希和文件名的字典 hashMap = {} # 存储已删除文件的列表 deletedFiles = [] # 这代码文件所在目录下的文件 # filelist = [f for f in os.listdir() if os.path.isfile(f)] # 直接指定文件目录 filelist = [] filePath = 'C:\Documents\WeChat Files\wxid_hubrboqkd9jr22\FileStorage\File\2022-07\' for dirpath, dirnames, filenames in os.walk(filePath): for filename in filenames: # print(filename) filelist.append(os.path.join(dirpath, filename)) # filelist.append(filename) for f in filelist: key = hashFile(f) # 如果密钥已存在,则删除该文件 if key in hashMap.keys(): deletedFiles.append(f) os.remove(f) else: hashMap[key] = f if len(deletedFiles) != 0: print('删除的文件') for i in deletedFiles: print(i) else: print('未找到重复文件')
对我的微信保存的文件进行运行结果的如下,可以看出还是删除了不少重复文件的。
C:\ProgramData\Anaconda3\python.exe "G:/OneDrive - shu.edu.cn/1-学习资料/python/python实战项目代码合集/重复文件删除.py"删除的文件C:\Documents\WeChat Files\FileStorage\File\2022-07\20220722-港股晨报.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\20220726-港股晨报.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\22BSSB02779@1000.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\info2soft-i2node-7.1.68.20122900-el6.x86_64.rpmC:\Documents\WeChat Files\FileStorage\File\2022-07\info2soft-i2node-7.1.68.20122900-el7.x86_64.rpmC:\Documents\WeChat Files\FileStorage\File\2022-07\info2soft-i2node-7.1.68.20122900.exeC:\Documents\WeChat Files\FileStorage\File\2022-07\Kubernetes 实践指南(Kubernetes Practice Guide).pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\sources.listC:\Documents\WeChat Files\FileStorage\File\2022-07 ypora-setup-x64.exeC:\Documents\WeChat Files\FileStorage\File\2022-07\unsigned.goC:\Documents\WeChat Files\FileStorage\File\2022-07\vmware openkylin安装心得.txtC:\Documents\WeChat Files\FileStorage\File\2022-07\《如何打一个数据挖掘比赛》入门版.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\《如何打一个数据挖掘比赛》进阶版.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\【通知】北京市总工会机关系统60岁以上老年人疫苗接种集中攻坚行动实施方案.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\上补充说明.docxC:\Documents\WeChat Files\FileStorage\File\2022-07\乾颐堂安全CCIE V6课表(28班)20220801开班(v1).pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\的通知.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\目220726.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\新能源锂电解决方案2.0.pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\新视频课程通告(2).txtC:\Documents\WeChat Files\FileStorage\File\2022-07\新视频课程通告.txtC:\Documents\WeChat Files\FileStorage\File\2022-07\白酒行业数字营销洞察白皮书(2021年).pdfC:\Documents\WeChat Files\FileStorage\File\2022-07\附件1:建设.pdfProcess finished with exit code 0
留言与评论(共有 0 条评论) “” |