微信文件整理

微信开了自动下载文件总是会下载大量重复的文件,所以写了个脚本希望能协助大家整理微信文件,当前还在尝试实现命名不明确文件的重命名,大家有什么意见可以提一下

PS:这里需要插入你的指定文件存放路径(工程还小还没写前端)

import os
import difflib
import hashlib
from collections import defaultdict

# 定义函数:计算文件的哈希值
def get_file_hash(file_path):
    """
    计算文件的 MD5 哈希值。
    :param file_path: 文件路径
    :return: 文件的 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 get_file_similarity(file1, file2):
    """
    使用 difflib.SequenceMatcher 计算两个文件名的相似度。
    :param file1: 第一个文件名
    :param file2: 第二个文件名
    :return: 相似度(0 到 1 之间的浮点数)
    """
    return difflib.SequenceMatcher(None, file1, file2).ratio()

# 定义函数:查找并删除相似度高且内容相同的文件
def find_and_delete_duplicates(directory, similarity_threshold=0.8):
    """
    检索指定目录下的文件,删除相似度高且内容相同的文件。
    :param directory: 指定的目录路径
    :param similarity_threshold: 文件名相似度阈值(0-1之间)
    """
    # 用于存储文件大小和对应文件路径的字典
    files_info = defaultdict(list)

    # 遍历指定目录及其子目录中的所有文件
    for root, dirs, files in os.walk(directory):
        for file in files:
            # 获取文件的完整路径
            file_path = os.path.join(root, file)
            # 获取文件的大小
            file_size = os.path.getsize(file_path)
            # 将文件路径按大小分类存储
            files_info[file_size].append(file_path)

    # 检查相同大小的文件并比较文件名相似度和哈希值
    for size, files in files_info.items():
        if len(files) > 1:  # 如果有多个文件大小相同
            for i in range(len(files)):
                if not os.path.exists(files[i]):  # 检查文件是否存在
                    continue
                hash1 = get_file_hash(files[i])
                for j in range(i + 1, len(files)):
                    if not os.path.exists(files[j]):  # 检查文件是否存在
                        continue
                    # 获取文件名
                    file1 = os.path.basename(files[i])
                    file2 = os.path.basename(files[j])
                    # 计算文件名相似度
                    similarity = get_file_similarity(file1, file2)
                    if similarity >= similarity_threshold:
                        # 计算文件的哈希值
                        hash2 = get_file_hash(files[j])
                        if hash1 == hash2:
                            # 如果文件名相似度高于阈值且哈希值相同,则删除其中一个文件
                            try:
                                print(f"Deleting {files[j]} (Similarity: {similarity:.2f}, Hash: {hash1})")
                                os.remove(files[j])
                            except PermissionError as e:
                                print(f"Permission denied when trying to delete {files[j]}: {e}")

if __name__ == "__main__":
    # 指定要检索的目录路径
    directory_path = r"指定目录路径"
    # 调用函数
    find_and_delete_duplicates(directory_path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值