首页 > 编程语言 >微信电脑文件清理python程序

微信电脑文件清理python程序

时间:2024-05-10 10:23:28浏览次数:25  
标签:files python 微信 清理 dict file path folder os

import os,re
from itertools import combinations

#两两组合
def combinations_iterative(elements):
    return list(combinations(elements, 2))

#将按照字符串长度升序排列
def sort_by_length(lst):
    # 定义一个自定义排序函数,按字符串长度排序
    def length_sort(item):
        return len(item)

    # 使用 sorted 函数对列表进行排序,按照字符串长度升序排列
    return sorted(lst, key=length_sort)

#第一轮遍历文件
def build_file_dict(folder_path):
    file_dict = {}

    # 遍历文件夹中的所有文件
    for root, dirs, files in os.walk(folder_path):
        for file_name in files:
            # 获取文件的完整路径
            file_path = os.path.join(root, file_name)
            # 获取文件的体积
            file_size = os.path.getsize(file_path)//1024

            # 获取文件的基础名和扩展名
            base_name, extension = os.path.splitext(file_name)

            # 如果文件体积已经在字典中
            if file_size in file_dict:
                # 如果文件扩展名已经在内部字典中
                if extension in file_dict[file_size]:
                    # 将文件基础名添加到对应的列表中
                    file_dict[file_size][extension].append(base_name)
                else:
                    # 创建新的扩展名列表,并添加基础名
                    file_dict[file_size][extension] = [base_name]
            else:
                # 创建新的内部字典,并添加扩展名和基础名
                file_dict[file_size] = {extension: [base_name]}

    return file_dict

# 查找重复的文件 并删除
def find_duplicate_files(file_dict):
    for k,v in file_dict.items():
        for k2,v2 in v.items():

            duplicate_files=set() #疑似重复
            existing_files=set() 

            result=combinations_iterative(v2) #两两组合
            for comp in result:
                temp=sort_by_length(comp)
                if len(temp[0])!=len(temp[1]):
                    match = re.match(r'(.*)\((\d+)\)', temp[1])
                    if match:
                        if match.group(1)==temp[0]:
                            duplicate_files.add(temp[1])
                            existing_files.add(temp[0])
            if len(duplicate_files)>0:
                print(existing_files)
                print(duplicate_files)
                for dd in duplicate_files:
                    file_path=os.path.join(folder_path, dd+k2)
                    
                    # 获取当前权限
                    current_permissions = os.stat(file_path).st_mode
                    # 移除只读权限
                    os.chmod(file_path, current_permissions | 0o222)
                    print(f"删除副本文件:{file_path}")
                    os.remove(file_path)
                print('-'*5)
# 遍历所有的子文件夹
def find_direct_subdirectories(folder):
    subdirectories = []
    # 使用 os.listdir() 函数获取文件夹下的所有项
    items = os.listdir(folder)
    # 遍历每个项,筛选出子文件夹
    for item in items:
        item_path = os.path.join(folder, item)
        if os.path.isdir(item_path):
            subdirectories.append(item_path)
    return subdirectories

folder_patha = r"F:\微信文件备份\WeChat Files\kcjevin\FileStorage\File"
subdirs = find_direct_subdirectories(folder_patha)
print("直接子文件夹列表:")
for subdir in subdirs:
    print(subdir)
    folder_path = subdir  # 替换为你的文件夹路径
    file_dict = build_file_dict(folder_path)
    # print(file_dict)
    find_duplicate_files(file_dict)

标签:files,python,微信,清理,dict,file,path,folder,os
From: https://www.cnblogs.com/duoba/p/18183723

相关文章

  • 详解Python 中可视化数据分析工作流程
    本文分享自华为云社区《Python可视化数据分析从数据获取到洞见发现的全面指南》,作者:柠檬味拥抱。在数据科学和分析的领域中,可视化是一种强大的工具,能够帮助我们理解数据、发现模式,并得出洞见。Python提供了丰富的库和工具,使得可视化数据分析工作流程变得高效而灵活。本文将介绍......
  • Python进阶之面向对象编程
    【一】人狗大战小游戏【1】游戏前提分析人可以打狗,狗掉血,狗可以咬人,人掉血人的属性有名字、年龄、伤害、血量、类型狗的属性有名字、年龄、伤害、血量、类型【2】游戏实现(1)定义人和狗的属性#【1】用字典定义,代码较冗余dog1={'name':'狗蛋','d_type':'中......
  • python 基础习题 for循环
    1.用for循环打印出从1到10的所有整数,输出如下:12345678910  2.  声明如下变量:aString='Python'..........#请补齐以上省略号处的for循环语句,使得输出结果是:当前字母:P当前字母:y当前字母:t当前字母:h当前字母:o当前字母:n 最好用两种方法,一个使用不......
  • ROS话题通讯编写发布者(publisher)与订阅者(subscriber) Python
    学习参考:ROS/Tutorials/WritingPublisherSubscriber(python)-ROSWiki本文主要为了加强学习记忆,不是供人参考学习,如果想要学习点击链接系统学习; 在自己创建的工作空间下的src目录下创建一个新的功能包,在功能包中创建scripts文件夹,在内部放置.py源码; 下面剖析发布者源码......
  • 学习python步骤
    参考链接:https://zhuanlan.zhihu.com/p/693208513一、Python基础学习Python语言基础的路线可以分为以下几个阶段:Python3入门:了解Python3的安装方法、如何运行Python程序以及交互模式的使用,同时学习注释的添加方法。数据类型:掌握Python中的各种数据类型,包括数字、布尔值、......
  • PyCharm编辑器结合Black插件,轻松实现Python代码格式化
    1、简介使用Black对Python代码进行格式化,可使代码看起来更美观。但是,随着项目规模不断变大,对每个文件运行Black变得很繁琐。能否在文件保存后立即运行Black呢?本文就来介绍在PyCharm中实现这一目标的方法。2、安装Black首先,在虚拟环境中安装Black。$pipinstallblack ......
  • python教程6.6-发送邮件smtplib
    实现步骤: Python对SMTP⽀持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件,它对smtp协议进⾏了简单的封装。简单代码示例:发送html格式的邮件:在html中插入图片: ......
  • python学习----谁在说谎逻辑运算
    if__name__=='__main__':Li=[0,1]forainLi:forbinLi:forcinLi:zhang=(b==0)li=(c==0)wang=(a+b==0)if(zhang+li+wang==2anda+b+c=......
  • ubuntu22 python2 pyinstaller 打包报错:'NoneType' object has no attribute 'groups'
    前言最近有个需求,需要在ubnutu22上使用pyinstaller打包一个python2的文件。中间遇到了一些问题:pip2installpyinstaller报错解决方案:pip2installpyinstaller==3.6python2和python3的pyinstaller如何同时存在,我想把python2的pyinstaller命名为pyin......
  • python捕捉windows桌面
    使用mss模块截取屏幕图像#安装msspipinstallmssimportmss#获取屏幕尺寸withmss.mss()assct:monitor=sct.monitors[0]screen_width=monitor["width"]screen_height=monitor["height"]#设置捕获区域(这里设置为整个屏幕)monitor={"top":......