快捷搜索:  汽车  科技

python删除重复值代码(python全项目实战系列)

python删除重复值代码(python全项目实战系列)import hashlib import 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()

本系列旨在通过一系列由浅入深的python实战代码或项目,使普通人也能感受到编程的乐趣,编程能够在平时的工作生活上有所帮助。欢迎查看系列的开篇词和前面文章。

概述

重复文件占用磁盘空间,尤其是微信的文件,一个转发就会多出一个重复文件,一个个来手工查看并删除十分费力。所以分享一个python的实用脚本文件,根据文件的hash值来判断文件是否相同,相同即可删除,节省磁盘空间。

文件名不影响对hash的计算。

可以把哈希值简单地理解成是一段数据(某个文件,或者是字符串)的DNA,或者身份证。

通过一定的哈希算法,将一段较长的对象映射为较短小的hash值,hash的特点是唯一的,一旦对象发生了变化,哪怕是一个微小的变化,他的哈希值也会发生变化。另外一方面,没有两个数据的哈希值是完全相同的。

代码实现过程

基于hash唯一性的特点,常常用来判断两个文件是否相同。代码的程序结构是:

  1. 定义hashFile函数,用来读取文件,并计算起hash值
  2. 读取文件夹下的文件,子文件夹的也会被读取,写入列表中。
  3. 遍历文件,计算hash值,并进行对比,如果hash值重复,则删除对应的文件。
  4. 打印出删除的文件,如果没有重复文件,也会有提示。

具体代码

import hashlib import 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-港股晨报.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\20220726-港股晨报.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\22BSSB02779@1000.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\info2soft-i2node-7.1.68.20122900-el6.x86_64.rpm C:\Documents\WeChat Files\FileStorage\File\2022-07\info2soft-i2node-7.1.68.20122900-el7.x86_64.rpm C:\Documents\WeChat Files\FileStorage\File\2022-07\info2soft-i2node-7.1.68.20122900.exe C:\Documents\WeChat Files\FileStorage\File\2022-07\Kubernetes 实践指南(Kubernetes Practice Guide).pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\sources.list C:\Documents\WeChat Files\FileStorage\File\2022-07\typora-setup-x64.exe C:\Documents\WeChat Files\FileStorage\File\2022-07\unsigned.go C:\Documents\WeChat Files\FileStorage\File\2022-07\vmware openkylin安装心得.txt C:\Documents\WeChat Files\FileStorage\File\2022-07\《如何打一个数据挖掘比赛》入门版.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\《如何打一个数据挖掘比赛》进阶版.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\【通知】北京市总工会机关系统60岁以上老年人疫苗接种集中攻坚行动实施方案.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\上补充说明.docx C:\Documents\WeChat Files\FileStorage\File\2022-07\乾颐堂安全CCIE V6课表(28班)20220801开班(v1).pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\的通知.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\目220726.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\新能源锂电解决方案2.0.pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\新视频课程通告(2).txt C:\Documents\WeChat Files\FileStorage\File\2022-07\新视频课程通告.txt C:\Documents\WeChat Files\FileStorage\File\2022-07\白酒行业数字营销洞察白皮书(2021年).pdf C:\Documents\WeChat Files\FileStorage\File\2022-07\附件1:建设.pdf Process finished with exit code 0


python删除重复值代码(python全项目实战系列)(1)

猜您喜欢: