微信文件清理工具

1 背景

        因为微信当前的架构原因,相同的文件在不同的聊天对象、聊天群之间转发时,每一次转发,微信都会将文件下载保存一次(过大的需要手动下载的文件除外)。同时小文件微信自动储存的方式也是通常也是储存两次,即每一个文件,微信都会下载两次。如下图所示:

        这种机制也就导致了微信储存文件的文件夹及其占空间,而且由于其中大量文件为副本,也导致了寻找文件的不方便性。同时由于文件的大量性,想人工删除重复文件又显得工作量巨大。全部删除又可能出现日后找文件时出现“文件被删除”、“文件过期”的囧境。

        因此笔者之前编写了一个Python程序,借助该程序我们便可以轻松删除重复文件(源代码在文尾)。

2 程序概述

Author:SouthDream

CodeName:Clear_File_v2.0

Version:2.0

Date:20223-11-23

Function:删除文件夹中的重复性文件

Background:微信同一个文件不停转发后,每转发一次都会生成一次副本,以“(num)”结尾。本程序用以删除这些因为转发而产生的重复文件

Input:输入文件路径

Output:删除的文件名,以及被删除文件所属目录,以及删除的重复文件的总数

Notes:打开待删除文件夹的属性,关闭“只读”属性;以管理员权限运行本程序

3 程序演示

3.1 输入

        路径输入到待处理文件夹的上一级目录即可,如图,一般微信的文件存储位置文件目录如图所示,若想对全部的文件夹进行删重处理,路径输入到File即可。

3.2 输出

        完成输入后,程序便会自动遍历当前路径下的所有目录及文件,并删除处于同一目录下的相同文件(以文件名作为识别,不识别文件真实内容)。

        如下图所示,程序会逐目录进行查找,并删除。在完成所有删除后,程序会输出此次删除的文件数量。

4 注意事项

        一定要“打开待删除文件夹的属性,关闭“只读”属性;以管理员权限运行本程序”,否则程序虽然可以识别出要删除的文件,但是却会因为权限不足,无法删除,出现下图这种情况:

4.1 以管理员权限运行本程序

        如使用VsCode运行程序,打开VsCode时如下图操作即可。其他运行方式也是一样的道理。

4.2 关闭“只读”属性

        在待处理文件夹的上级目录打开目录属性,关闭“只读”即可,程序处理完成后,文件夹会自动恢复到“只读”状态,不会影响日后使用。

5 源代码

"""
Author:SouthDream
CodeName:Clear_File_v2.0
Version:2.0
Date:20223-11-23
Function:删除文件夹中的重复性文件
Background:微信同一个文件不停转发后,每转发一次都会生成一次副本,以“(num)”结尾。本程序用以删除这些因为转发而产生的重复文件
Input:输入文件路径
Output:删除的文件名,以及被删除文件所属目录,以及删除的重复文件的总数
Notes:打开待删除文件夹的属性,关闭“只读”属性;以管理员权限运行本程序
"""

import os

def Analyse(filePath , fileList , fileDict):
    print("Analysing........\n")
    for file in fileList :
        if "(" in file:
            dictKey = file[:file.find("(")]
        else :
            dictKey = file[:file.find(".")]
        fileTime = os.path.getatime(os.path.join(filePath,file))
        if dictKey not in fileDict.keys() :
                fileDict[dictKey] = list()
                fileDict[dictKey].append(tuple([file,fileTime]))
        else :
             fileDict[dictKey].append(tuple([file,fileTime]))
    for Key in fileDict.keys() :
        fileDict[Key].sort(key=lambda x: x[1])
        fileDict[Key].reverse()

def DelFile(filePath , fileDict):
     print("Delfile........\n")
     #PrintDict(fileDict)
     for keyWord in fileDict.keys() :
          #print(type(fileDict[keyWord]))
          if len(fileDict[keyWord]) < 2 :
               continue
          else :
               while(len(fileDict[keyWord])>=2) :
                    popItem = fileDict[keyWord].pop()
                    print(f"deleteFile = {popItem[0]}")
                    global count
                    try: 
                         os.remove(os.path.join(filePath,popItem[0]))
                         count += 1
                    except PermissionError:  
                         print("Unable to delete file. Please check if the file is in use or try running your program with higher permissions.")

def PrintDict(fileDict) :
     for item in fileDict :
          print(item)

if __name__ == "__main__" :
    Father_path = input("Please input the file path:")
    global count
    count = 0
    for root, dirs, files in os.walk(Father_path) :  
        for name in dirs:  
            path = os.path.join(root,name)
            files = os.listdir(path)
            global analysis 
            analysis = {}
            print(f"Folder:{path}")
            Analyse(path,files,analysis)
            DelFile(path,analysis)
            print("Delete Compelete.........\n\n")
    print(f"The number of deleted file is {count}")

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SouthDreamYaoJia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值