删除微信重复文件的简易工具

news2024/9/27 12:16:32

去我的个人博客观看,观感更佳哦,😙😙

前言

!!!!温馨提示:假如你是小白,啥都不懂,请直接跳到文章的最后!!!

原本我是没想写这篇文章,契机是某一天我突然打开微信的存储空间占用才发现。多少?😡我寻思平常也不怎么用微信,怎么占用的空间这么离谱,居然有20个G左右,这是在微信上存了个小电影吗?

在这里插入图片描述

抱着好奇心的我,打开了微信的物理存储位置,其他平台我没试过,仅在windows平台下测试过,存储位置一般能通过这样打开

在这里插入图片描述

找寻到存储文件的位置,一般是子目录 FileStorage\File这个位置就是用来存储通过微信保存的各种文件,而且会按照日期排序

在这里插入图片描述

随便点进去一个会发现,这个文件夹下存储了大量相同的文件,然后在原有的文件的名字后面加上(1),(2),(3),(1)(1)这种序号,也就是说这些文件都是被重复存储了

在这里插入图片描述

存在的问题

通过上面的流程,可以得出一个结论,微信是存储了大量重复文件,才会占用这么大的存储空间,我在网上也找了一些解释,这个似乎跟微信的存储策略有关

据悉,这种情况出现的原因之一是微信的文件转发策略导致。例如将同一份文件转发给多个好友,每一次转发都会重新保存一份在手机上,重复文件占用了手机大量存储空间。而且过大的空间占用也会使手机出现明显的卡顿和发热等情况,影响正常使用。

也就是说,我们完全可以把这些重复的文件全部删除,但是我的微信记录已经有好几年了,要是一个个删除,是一件费时费力的方法。于是!🤓我突发奇想,既然这样的话,编写一个批量删除的程序不就行了?😗

效果展示

老规矩,我喜欢在看一系列繁琐的步骤前先看看效果,这样我才有继续看下去的欲望,相信大多数人都是这样想的😝

  1. 首先执行程序,选择是否要进行递归删除,递归删除意思就是,你选择的目录的子目录里面的重复文件也会被删除。这里我们选择n

    在这里插入图片描述

  2. 选择路径

  3. 执行效果,按回车可以退出

在这里插入图片描述

  1. 删除的文件会到回收站里面,而不是永久删除,这样就能有撤销的余地了

问题的解决与思路

这块的内容会涉及到一些专业知识,假如你不懂,那么直接跳过就行,使用我打包好的程序即可。

  1. 首先通过观察可以发现,微信在保存这些重复文件的特点是在文件名后加上序号,比如
字符串.doc
字符串(1).doc
字符串(2).doc
字符串(1)(1).doc

我们可以通过正则表达式去匹配这种字符串,“字符”+“序号”.”后缀名”

"""
.*表示匹配任意字符
(\d)匹配带有括号的序号
"""
.*\(\d\).*

这样我们就能通过程序识别这些文件

  1. 其他,有次非常关键的点是,假如你在微信勾选了这个选项,那么存储的文件会因为只读权限,导致删除失败,因此在识别到文件之后,我们还需要改变文件的权限,才能删除,这里可以使用os.chmod函数做到
    在这里插入图片描述
#权限检查,移除只读属性
    for file in matchfilelist:
        try:
            os.chmod(file, stat.S_IWRITE)
            send2trash.send2trash(os.path.normpath(file))#将匹配的文件放入回收站
            print(f"成功删除了文件: {file}")
        except Exception as e:
            print(f"删除文件时出现错误: {file},错误信息: {e}")
  1. 最后我们需要解决的问题是,由于文件夹的子目录数量非常多,因此我们可能不想对每个文件夹都单独执行一遍程序,最好是能递归地自动执行,这里我们可以使用os.walk,它可以记录目录的文件数,从而能递归对子目录也进行删除操作
def recursive_delete_file(directory):
    for root, dirs, files in os.walk(directory):
        delete_file(root)

完整程序实现

import os
import stat
import re
import tkinter as tk
from tkinter import filedialog
import send2trash
def delete_file(folder_path):
    pattern = re.compile(r'.*\(\d\).*')
    filelist=os.listdir(folder_path)
    matchfilelist=[]
    #找出匹配的文件名
    for file in filelist:
        if re.match(pattern,file):
            matchfilelist.append(folder_path+"/"+file)
    #权限检查,移除只读属性
    for file in matchfilelist:
        try:
            os.chmod(file, stat.S_IWRITE)
            send2trash.send2trash(os.path.normpath(file))#将匹配的文件放入回收站
            print(f"成功删除了文件: {file}")
        except Exception as e:
            print(f"删除文件时出现错误: {file},错误信息: {e}")

def recursive_delete_file(directory):
    for root, dirs, files in os.walk(directory):
        delete_file(root)

def main():
    root = tk.Tk()
    root.withdraw()  # 隐藏主窗口
    print("是否采取递归删除?(y/n),递归操作相当危险,请谨慎选择")
    flag=input()
    file_path = filedialog.askdirectory() # 打开文件选择对话框
    if flag=="y" or flag=='Y':
        recursive_delete_file(file_path)
    else:
        delete_file(file_path)
    root.destroy()
    input("按回车键退出")
if __name__=='__main__':
    main()

给小白

假如上面的内容你完全不知道是什么,不会python,也不知道啥是脚本。没事,没事🫠,直接下载我打包好的exe程序就行了😈

https://github.com/kashima19960/Wechat_Duplicatefiles_Delete/releases/download/v1/main.exe

免责声明

本程序旨在帮助用户删除特定模式的文件。使用本程序可能会导致数据丢失,包括重要文件。请在使用前确保您已充分了解本程序的功能,并已做好数据备份。 作者不对使用本程序造成的任何直接或间接损失负责,包括但不限于数据丢失、硬件损坏或业务中断。使用本程序即表示您同意自行承担所有风险。 请在使用前仔细阅读并理解本程序的使用说明。如果您不同意本免责声明的任何部分,请不要使用本程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2089413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5款手机版的影视解说文案生成器,无须下载更方便!

在这个自媒体的红利时期,影视解说创作占据了内容创作的很大一部分。而影视解说文案则是帮助观众更好地理解和欣赏影视作品的重要点。随着手机的普及,越来越多的人希望能够在手机上方便地生成影视解说文案创作。今天,我们就来介绍5款手机版的影…

Shared memory bank conflicts

共享内存和bank: 在CUDA架构中,共享内存是一个非常快速的内存类型,它位于每个线程块内部并为该线程块内的所有线程提供服务。为了实现高吞吐量的访问,共享内存被划分为多个独立的存储区域,称为“banks”。每个bank可以在单个时钟…

创新微MinewSemi推出基于Nordic nRF54系列芯片 SoC 低功耗蓝牙5.4模组

在物联网技术飞速发展的今天,创新微MinewSemi隆重推出基于Nordic最新nRF54系列芯片SoC的ME54BS01和ME54BS02全新低功耗蓝牙5.4模组。这两款模组的问世,标志着我们在推动物联网设备智能化、高效化道路上的迈出了坚实的一步,展示了对未来技术的…

回归预测|基于卷积神经网络-鲸鱼优化-最小二乘支持向量机的数据回归预测Matlab程序 CNN-WOA-LSSVM

回归预测|基于卷积神经网络-鲸鱼优化-最小二乘支持向量机的数据回归预测Matlab程序 CNN-WOA-LSSVM 文章目录 一、基本原理1. 数据预处理2. 特征提取(CNN)3. 参数优化(WOA)4. 模型训练(LSSVM)5. 模型评估和优…

World of Warcraft [CLASSIC][80][Grandel] Mount with 310% speed

310%速度的坐骑【被感染的始祖幼龙】 永恒之眼(3个) 纳克萨玛斯(9个) 10人副本, 白马 (DPS N)黑马(DPS N)绿马(T N DPS)红马(T …

诚信为金:揭秘好征信的六大黄金标准,并实践守护好它的五大秘籍

什么是好征信,怎么守护它 咱们平时总听人说“征信”,“征信”到底是个什么东西,但很少人能透彻的了解它。它是一个有点神秘但又挺重要的东西,简单说,它就是咱在金融界的一张“身份证”,记录着咱们的信用表…

【C++ Qt day3】

2、设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高、体重,再设计一个Stu类,类中包含私有成员:成绩、Per类对象p1,设计这两个类的构造函数、析构函数和拷贝构造函数。

【2024 CCF编程能力等级认证(GESP)C++ 】一级大纲

目录 1. 背景2. 考核知识块3. 考核内容3.1 计算机基础知识3.2 集成开发环境3.3 结构化程序设计3.4 程序的基本语句3.5 程序的基本概念3.6 基本运算3.7 基本数据类型4. 考核目标5. 题型分布6. 考试时长7. 认证时间与报名8. 政策与福利9. GESP一级认证形式 1. 背景 官网&#xff…

13.DataLoader 的使用

DataLoader 的使用 dataset:告诉程序中数据集的位置,数据集中索引,数据集中有多少数据(想象成一叠扑克牌)dataloader:加载器,将数据加载到神经网络中,每次从dataset中取数据&#x…

JAVA中的线程池说明二

目录 1.引入 2.参数解释 3.标准库中提供的四个拒绝策略 1.引入 java.util.concurrent 这个包里面放的很多类都是和并发编程(多线程编程)密切相关,这个包简称JUC;今天我们主要来了解Java线程池的相关知识。 2.参数解释 在这里,我们主要讲…

无痛除毛,告别异味,希喂、有哈、小米宠物空气净化器真实测评

养宠在年轻人生活中逐渐成为一种新的潮流,越来越多的人加入到铲屎官的队伍。其中,养宠最多的品类非猫咪莫属,凭借自身可爱的外表收获人们的芳心。同时猫咪也是宠物中掉毛最严重的,漫天的浮毛在家中不断飘散,带来无尽的…

Java——断点调试

一、断点调试简介 Java的断点调试是程序开发中非常重要的一个技术,它允许开发者在程序执行时暂停执行,以便检查变量的状态、观察程序的流程、并定位错误。 1、断点(Breakpoint): 在代码的某一行指定的暂停点。当程序…

个人旅游网(1)——数据库表详解

文章目录 一、数据库表详情1.1 tab_category 表1.2、tab_route 表1.3、tab_route_img 表1.4、tab_user 表1.5、tab_favorite 表1.6、tab_address 表1.7、tab_seller 表1.8、tab_order 表1.9、tab_orderItem 表 一、数据库表详情 该网站是一个旅游网站,为具有出游的需…

C程序设计(潭浩强教授版)精选程序题

目录 (一)顺序程序设计部分 (二)选择程序设计部分 (三)循环程序设计部分 (四)数组处理数据部分 (一)顺序程序设计部分 1. 使用getchar读入两个字符&#xf…

对比 PDAF、CDAF 和 LAAF 自动对焦技术

深入解析相位检测自动对焦(PDAF) 相位检测自动对焦(PDAF,Phase Detection Auto Focus)是一种高效的自动对焦技术,广泛应用于现代数码相机、无反相机和智能手机摄像头中。为了更好地理解 PDAF,我…

C++11中的lambda匿名函数

一、引言 C11中引入的lambda表达式(也称为匿名函数或lambda函数)提供了一种方便且灵活的方式来定义和使用小的匿名函数对象。这些lambda表达式在编写回调函数、操作容器的算法中、或者在需要快速定义和传递一个函数逻辑给另一个函数时特别有用。 二、基…

行得稳,跑得远,美团如何做到长期主义持续发力?

在今天这样一个充满不确定性的时代,最能确定的是什么呢?我们这一代人,有幸成为诸多历史性时刻的亲历者和见证者。在此背景下,越来越多的企业家和经营者开始关注回归经营的本质和实现稳健经营的问题。 企业的稳健经营贯穿于企业的…

联华证券-掌握尾盘买入法的多种策略与实用技巧

尾盘买入法的常见方法与具体技巧 尾盘买入法是指在股票交易日的尾盘时段(通常指收盘前的15-30分钟)进行买入操作的策略。由于尾盘时段能够反映市场全天的交易情况以及主力资金的意图,尾盘买入法在捕捉短线机会方面具有一定的优势。以下是尾盘…

Python编码—掌握Python与Kubernetes:构建高效微服务架构

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

涨粉20w!AI真人视频转动漫,太好涨粉了,3步学会AI视频转绘!

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 这类视频,流量超大。从去年一直火到了现在。 前有…