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唯一性的特点,常常用来判断两个文件是否相同。代码的程序结构是:
- 定义hashFile函数,用来读取文件,并计算起hash值
- 读取文件夹下的文件,子文件夹的也会被读取,写入列表中。
- 遍历文件,计算hash值,并进行对比,如果hash值重复,则删除对应的文件。
- 打印出删除的文件,如果没有重复文件,也会有提示。
具体代码
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