清理微信重復快取
- 1、引言
- 2、glob模塊
- 2.1 快取路徑介紹
- 2.1.1電腦端
- 2.1.2 手機端
- 2.2 glob介紹
- 2.2.1 通配符介紹
- 2.2.2 方法介紹
- 2.2.3 提升效率
- 2.3 crc32
- 3、代碼實戰
1、引言
小屌絲:魚哥,磁盤多少錢?
小魚:你想要啥樣的:拼多多上的, 淘寶上的,京東上的,還是物體店里的?
小屌絲:我就是單純的想把我的電腦增加點容量~何苦這么難為我??
小魚:我記得你的電腦,不是剛增加不就,怎么又滿了?
小屌絲:說的我那啥似的…我這都是微信快取占的!
小魚:說的像真的似的,如果不是微信快取的原因,咋辦?
小屌絲:你先處理完…再說~ ~
小魚:這…整吧…
2、glob模塊
2.1 快取路徑介紹
在介紹glob模塊之前,我們先來說一下快取的路徑,
2.1.1電腦端
電腦端路徑:
C:\Users\用戶名\Documents\WeChat Files\微信名\FileStorage,
這是默認安裝,存盤的路徑地址;
如果自定義安裝,那地址另議,

2.1.2 手機端
手機端存盤路徑:
內部存盤設備→Android→data→com.tecent.mm→MicroMsg→Download
這就拿Android手機舉例;
2.2 glob介紹
2.2.1 通配符介紹
| 符號 | 功能 |
|---|---|
| * | 匹配0或多個字符 |
| ** | 匹配所有檔案,目錄,子目錄和子目錄里面的檔案 |
| ? | 匹配一個字符,這里與正則運算式? (正則?匹配前面運算式0次或者1次) |
| [] | 匹配指定范圍內的字符,如: [1-9]匹配1至9內的字符 |
| [!] | 匹配不在指定范圍內的字符 |
2.2.2 方法介紹
1、當前檔案下所有py路徑:
#當前檔案下所有py路徑
for ftname in glob.glob("**/*.py",recursive=True):
print(f'檔案輸出結果為{ftname}')
2、當前路徑檔案tmp下py檔案
#當前路徑檔案tmp下py檔案
for ftname in glob.glob("./tmp/*.py"):
print(f'檔案輸出結果為{ftname}')
3、單字通配符?,當前路徑檔案下以file開頭后有一個字符的py檔案:
#當前路徑檔案下以file開頭后有一個字符的py檔案
for ftname in glob.glob("./file?.py"):
print(f'檔案輸出結果為{ftname}')
4、范圍通配符[],當前路徑檔案下以file開頭后一個數字符的py檔案:
#當前路徑檔案下以file開頭后一個數字符的py檔案
for ftname in glob.glob("./file[0-9].py"):
print(f'檔案輸出結果為{ftname}')
5、范圍通配符[],當前路徑檔案下以file開頭后一個非數字符的py檔案:
#當前路徑檔案下以file開頭后一個非數字符的py檔案
for ftname in glob.glob("./file[!0-9].py"):
print(f'檔案輸出結果為{ftname}')
2.2.3 提升效率
小屌絲:魚哥,你這回傳的執行速度不夠快啊!
小魚:也對,鑒于你每天撩妹的資訊量巨大,我要使用殺手锏,
鑒于小屌絲這種情況,我們就使用glob模塊iglob, 回傳iterator執行效率更高,代碼如下:
#當前路徑檔案tmp下py檔案,使用iglob,回傳迭代器效率更高
for ftname in glob.iglob("./tmp/*.py"):
print(f'檔案輸出結果為{ftname}')

2.3 crc32
- CRC32 演算法概述 CRC 全稱 Cyclic Redundancy Check,又叫回圈冗余校驗,
- 和 md5 碼一樣都是 hash 的,
- 當兩個檔案內容的 CRC32 相同的時候,這個檔案也就是相同的,
- 反之,兩個檔案就是不同的檔案,
撰寫代碼
# -*- coding: utf-8 -*-
# @Time : 2021-10-17
# @Author : carl_DJ
def crc32(file_path):
with open(file_path, 'rb') as fh:
hash = 0
while True:
s = fh.read(1024)
if not s:
break
hash = zlib.crc32(s, hash)
return "%08X" % (hash & 0xFFFFFFFF)
3、代碼實戰
寫代碼之前,我們先捋一下思路,很簡單,就三步:
- 第一步,使用glob進行全盤掃描檔案
- 第二步,掃描的檔案的crc32值放入字典中
- 第三步,洗掉字典中crc32的值
撰寫代碼
# -*- coding: utf-8 -*-
# @Time : 2021-10-17
# @Author : carl_DJ
'''
1、使用glob.glob進行全盤檔案掃描
2、把檔案的crc32值放入字典中
3、洗掉字典中的crc32的值
'''
import os
import zlib
import glob
#掃描檔案,并洗掉重復檔案
def scan_floder(glob_path):
#設定一個空字典
crc32Dict = {}
#查找當前路徑下的檔案
for ftname in glob.glob(glob_path,recursive=True):
if os.path.isfile(ftname):
#crc32
crc = crc32(ftname)
if crc in crc32Dict:
print(f'已經存在的檔案:{crc32Dict.get(crc)}')
print(f'重復檔案:{ftname}')
print(f'洗掉檔案:{ftname}')
#洗掉重復的檔案
os.remove(ftname)
else:
crc32Dict[crc] = ftname
#把檔案的crc32值存入到字典中
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)
if __name__ == '__main__':
scan_floder(r'C:\Users\用戶名\Documents\WeChat Files\微信名稱\FileStorage\xxx')
運行結果

小屌絲:我去~ 可以啊魚哥,
小魚:必須的,是不是突然覺得腰不疼腿不酸,CUP運行可起勁了!
小屌絲:魚哥,還是你懂我~ ~
小魚:給你一個眼神,自己體會!

其實手機端跟電腦端的清理機制差不多, 只是路徑不一樣,
所以,手機版的,我就不展示了,
1.手機USB鏈接電腦,
2.代碼中路徑輸入手機端的路徑即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/323475.html
標籤:其他
下一篇:第一個Android程式
