python编程实现清理微信重复缓存文件


Posted in Python onNovember 01, 2021

文 | 某某白米饭

来源:Python 技术「ID: pythonall」

微信和 QQ 都有一个存放缓存文件的文件夹,微信在设置 --> 文件管理,QQ 在系统设置 --> 基本设置 --> 文件管理 --> 打卡个人文件中找到它,平时大家对这个文件夹关注度不高,这个文件夹慢慢的,偷偷的就占用了好几十个 G 的磁盘空间。下面就用 Python 写个删除重复文件的脚本清理这些空间。

glob 模块

glob 模块非常简单,就是用来查找文件和文件夹。查找文件只用到三个匹配符:"*", "?", "[]"。

通配符 功能

*:匹配0或多个字符

**:匹配所有文件,目录,子目录和子目录里面的文件

?:匹配一个字符,这里与正则表达式? (正则?匹配前面表达式0次或者1次)

[]:匹配指定范围内的字符,如: [1-9]匹配1至9内的字符

[!]:匹配不在指定范围内的字符

glob方法

这个方法返回所有匹配的文件路径列表

# 当前路径下所有 py 文件
for fname in glob.glob("**/*.py",recursive=True):
    print(fname)
 
# 当前路径文件 py 下 py 文件
for fname in glob.glob("py/*.py"):
    print(fname)
 
# 单字通配符 ?,当前路径文件下以 Tem 开头后有一个字符文件夹
for fname in glob.glob("Tem?"):
    print(fname)
 
# 范围通配符[],当前路径文件下以 Tem 开头后一个数字符的 py 文件
for fname in glob.glob("Tem[0-9].py"):
    print(fname)
 
# 范围通配符[!],当前路径文件下以 Tem 开头后一个非数字符的 py 文件
for fname in glob.glob("Tem[!0-9].py"):
    print(fname)
 
windowns下
file = glob.glob(r'D:\logs\*\*')

zlib.crc32

CRC32 算法概述 CRC 全称 Cyclic Redundancy Check,又叫循环冗余校验。和 md5 码一样都是 hash 的。当两个文件内容的 CRC32 相同的时候,这个文件也就是相同的。反之,两个文件就是不同的文件。

def crc32(file_path):
    with open(file_path, 'rb') as fh:
        hash = 0
        while True:
            s = fh.read(65536)
            if not s:
                break
            hash = zlib.crc32(s, hash)
        return "%08X" % (hash & 0xFFFFFFFF)

去重复

看到这里,想必都明白如何去重复文件了:1. 用 glob.glob 扫描所有文件,2. 把文件的 crc32 值放入字典中,3. 找到字典中已经存在的 crc32 值的key,删除当前文件。

import os
import zlib
import glob
def scanning_floder(glob_path):
    crc32Dict = {}
    for fname in glob.glob(glob_path, recursive=True):
        if os.path.isfile(fname):
            crc = crc32(fname)
            if crc in crc32Dict:
                print('已经存在文件:' + crc32Dict.get(crc))
                print('重复文件:' + fname)
                print('删除文件:' + fname)
                os.remove(fname)
                print('')
            else:
                crc32Dict[crc] = fname
def crc32(file_path):
    with open(file_path, 'rb') as f:
        hash = 0
        while True:
            s = f.read(1024)
            if not s:
                break
            hash = zlib.crc32(s, hash)
        return "%08X" % (hash & 0xFFFFFFFF)
 
scanning_floder(r"C:\Users\xxxx\Documents\WeChat Files\xxxx\FileStorage\**\*")

python编程实现清理微信重复缓存文件 

总结

本篇介绍了 glob 模块的用法和 crc32 值的计算,大家学废了吗?

更多关于python清理重复缓存文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Pyramid将models.py文件的内容分布到多个文件的方法
Nov 27 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
django drf框架中的user验证以及JWT拓展的介绍
Aug 12 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
python适合做数据挖掘吗
Jun 16 Python
OpenCV-Python实现轮廓的特征值
Jun 09 Python
Python中可变和不可变对象的深入讲解
Aug 02 Python
浅析Python OpenCV三种滤镜效果
Apr 11 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
Nov 01 #Python
Python字典的基础操作
Nov 01 #Python
Python集合的基础操作
Nov 01 #Python
python基础之类属性和实例属性
python基础之类方法和静态方法
Python Matplotlib绘制条形图的全过程
python基础之模块的导入
You might like
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
The specified CGI application misbehaved by not returning a complete set of HTTP headers
2011/03/31 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
vue源码中的检测方法的实现
2019/09/26 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
[46:23]完美世界DOTA2联赛PWL S2 FTD vs Magma 第一场 11.20
2020/11/23 DOTA
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
python中__call__内置函数用法实例
2015/06/04 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
python算法表示概念扫盲教程
2017/04/13 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
numpy返回array中元素的index方法
2018/06/27 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
Python内置类型性能分析过程实例
2020/01/29 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
Java 多态分析
2022/04/26 Java/Android