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