美文网首页
Python实现识别文件夹以及子文件夹中的重复文件

Python实现识别文件夹以及子文件夹中的重复文件

作者: 放羊娃华振 | 来源:发表于2024-07-24 20:39 被阅读0次

Python实现识别文件夹以及子文件夹中的重复文件,使用前需要注意几点:
1、python使用python3
2、确保代码中的folder_path路径正确
3、确保代码中的output_file路径正确且存在
4、确保有访问文件夹的权限,不行就使用sudo

一、python3版本

import os
import hashlib

def calculate_md5(file_path):
    """计算文件的MD5值"""
    hash_md5 = hashlib.md5()
    with open(file_path, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

def find_duplicate_images(folder_path):
    """查找文件夹中的重复图片"""
    md5_dict = {}
    
    for root, _, files in os.walk(folder_path):
        for file in files:
            if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.apk')):
                file_path = os.path.join(root, file)
                file_md5 = calculate_md5(file_path)
                
                if file_md5 in md5_dict:
                    md5_dict[file_md5].append(file_path)
                else:
                    md5_dict[file_md5] = [file_path]
                    
    return {k: v for k, v in md5_dict.items() if len(v) > 1}

def save_to_txt(md5_dict, output_file):
    """将重复图片信息保存到txt文件中"""
    with open(output_file, "w") as f:
        for md5, files in md5_dict.items():
            f.write(f"{md5}:\n")
            for file in files:
                f.write(f"{file}\n")
            f.write("\n")

if __name__ == "__main__":
    folder_path = "/home/ubuntu/Downloads"  # 替换为你的文件夹路径
    output_file = "duplicate_files.txt"
    
    duplicates = find_duplicate_images(folder_path)
    save_to_txt(duplicates, output_file)

    print(f"结果已保存到 {output_file}")

二、python2版本:

# -*- coding: utf-8 -*-
import os
import hashlib

def calculate_md5(file_path):
    #计算文件的MD5值
    hash_md5 = hashlib.md5()
    with open(file_path, "rb") as f:
        while True:
            chunk = f.read(4096)
            if not chunk:
                break
            hash_md5.update(chunk)
    return hash_md5.hexdigest()

def find_duplicate_images(folder_path):
    #查找文件夹中的重复图片
    md5_dict = {}
    
    for root, _, files in os.walk(folder_path):
        for file in files:
            if file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.apk')):
                file_path = os.path.join(root, file)
                file_md5 = calculate_md5(file_path)
                
                if file_md5 in md5_dict:
                    md5_dict[file_md5].append(file_path)
                else:
                    md5_dict[file_md5] = [file_path]
                    
    return dict((k, v) for k, v in md5_dict.items() if len(v) > 1)

def save_to_txt(md5_dict, output_file):
    #将重复图片信息保存到txt文件中
    with open(output_file, "w") as f:
        for md5, files in md5_dict.items():
            f.write("{}:\n".format(md5))
            for file in files:
                f.write("{}\n".format(file))
            f.write("\n")

if __name__ == "__main__":
    folder_path = "/home/ubuntu/Downloads"  # 替换为你的文件夹路径
    output_file = "duplicate_files.txt"
    
    duplicates = find_duplicate_images(folder_path)
    save_to_txt(duplicates, output_file)

    print "结果已保存到 {}".format(output_file)

相关文章

网友评论

      本文标题:Python实现识别文件夹以及子文件夹中的重复文件

      本文链接:https://www.haomeiwen.com/subject/aidphjtx.html