目录
  • 导语:
  • 正文:
    • glob 模块
    • glob方法
    • zlib.crc32
    • 去重复
  • 总结

    导语:

    哈喽,哈喽~大家有没有遇到过这种情况,手机用着用着没有内存了,一到设置里面一看。

    微信和 qq 10g!

    啊这。。。。。就离谱!好说,好说,设置中都有一个清除数据的功能,一键下去内存暂时都回来了,但是宝,你确定你微信和qq中的信息都没用吗?

    ​下面能www.887551.com就用 python 写个删除重复文件的脚本清理这些微信和qq空间。确保在清除内存的时候,你的重要信息还在。

    正文:

    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\**\*")    

    总结

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

    到此这篇关于python帮你解决手机qq微信内存占用太多问题的文章就介绍到这了,更多相关python qq微信内存占用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!