python 删除重复文件
使用场景
网上爬取的图片重复量太大,需要删除重复图片。
分析一下这个问题:
首先,文件个数非常多,手工查找是不现实的,再说,单凭我们肉眼,在几千张图片或文件里面找到完全相同的难度也是很大的。所以要用程序实现。那么用程序怎么实现呢?根据什么判断两个文件完全相同呢?
思路如下:
根据文件大小来判断,文件大小不相同的文件一定不一样。如果文件大小相同,就使用md5对文件进行加密,然后形成一个32的字符序列(md5可以看作一个字符串的‘指纹’或者‘信息摘要’)
这样我们就可以这样做:得到每个文件的md5,通过比较md5是否相同我们就可以确定两个文件是否相同。
代码如下:
# -*- coding: cp936 -*-
import hashlib
import os
import time
def getmd5(filename):
"""
获取文件 md5 码
:param filename: 文件路径
:return: 文件 md5 码
"""
file_txt = open(filename, 'rb').read()
# 调用一个md5对象
m = hashlib.md5(file_txt)
# hexdigest()方法来获取摘要(加密结果)
return m.hexdigest()
def main():
# 文件夹路径
path = input("path: ")
# 键为文件大小, 值为列表(文件路径、md5)
all_size = {}
total_file = 0
total_delete = 0
# 开始时间
start = time.time()
# 遍历文件夹下的所有文件
for file in os.listdir(path):
# 文件数量加 1
total_file += 1
# 文件的路径
real_path = os.path.join(path, file)
# 判断文件是否是文件
if os.path.isfile(real_path) == True:
# 获取文件大小
size = os.stat(real_path).st_size
# md5(默认为空)
size_and_md5 = [""]
# 如果文件大小已存在
if size in all_size.keys():
# 获取文件的md5码
new_md5 = getmd5(real_path)
# 大小相同,md5 为空,添加md5
if all_size[size][0] == "":
all_size[size][0] = new_md5
# md5 已存在,删除
if new_md5 in all_size[size]:
print('删除', real_path)
os.remove(real_path)
total_delete += 1
else:
# md5 不存在,进行添加
all_size[size].append(new_md5)
else:
# 如果文件大小不存在,则将此文件大小添加到 all_size 字典中
all_size[size] = size_and_md5
# 结束时间
end = time.time()
time_last = end - start
print('文件总数:', total_file)
print('删除个数:', total_delete)
print('耗时:', time_last, '秒')
if __name__ == '__main__':
main()
原文链接:https://blog.csdn.net/apollo_miracle/article/details/104109279