python編程實(shí)現(xiàn)清理微信重復(fù)緩存文件
文 | 某某白米飯
來源:Python 技術(shù)「ID: pythonall」
微信和 QQ 都有一個(gè)存放緩存文件的文件夾,微信在設(shè)置 --> 文件管理,QQ 在系統(tǒng)設(shè)置 --> 基本設(shè)置 --> 文件管理 --> 打卡個(gè)人文件中找到它,平時(shí)大家對這個(gè)文件夾關(guān)注度不高,這個(gè)文件夾慢慢的,偷偷的就占用了好幾十個(gè) G 的磁盤空間。下面就用 Python 寫個(gè)刪除重復(fù)文件的腳本清理這些空間。
glob 模塊
glob 模塊非常簡單,就是用來查找文件和文件夾。查找文件只用到三個(gè)匹配符:"*", "?", "[]"。
通配符 功能
*:匹配0或多個(gè)字符
**:匹配所有文件,目錄,子目錄和子目錄里面的文件
?:匹配一個(gè)字符,這里與正則表達(dá)式? (正則?匹配前面表達(dá)式0次或者1次)
[]:匹配指定范圍內(nèi)的字符,如: [1-9]匹配1至9內(nèi)的字符
[!]:匹配不在指定范圍內(nèi)的字符
glob方法
這個(gè)方法返回所有匹配的文件路徑列表
# 當(dāng)前路徑下所有 py 文件
for fname in glob.glob("**/*.py",recursive=True):
print(fname)
# 當(dāng)前路徑文件 py 下 py 文件
for fname in glob.glob("py/*.py"):
print(fname)
# 單字通配符 ?,當(dāng)前路徑文件下以 Tem 開頭后有一個(gè)字符文件夾
for fname in glob.glob("Tem?"):
print(fname)
# 范圍通配符[],當(dāng)前路徑文件下以 Tem 開頭后一個(gè)數(shù)字符的 py 文件
for fname in glob.glob("Tem[0-9].py"):
print(fname)
# 范圍通配符[!],當(dāng)前路徑文件下以 Tem 開頭后一個(gè)非數(shù)字符的 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,又叫循環(huán)冗余校驗(yàn)。和 md5 碼一樣都是 hash 的。當(dāng)兩個(gè)文件內(nèi)容的 CRC32 相同的時(shí)候,這個(gè)文件也就是相同的。反之,兩個(gè)文件就是不同的文件。
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)
去重復(fù)
看到這里,想必都明白如何去重復(fù)文件了:1. 用 glob.glob 掃描所有文件,2. 把文件的 crc32 值放入字典中,3. 找到字典中已經(jīng)存在的 crc32 值的key,刪除當(dāng)前文件。
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('已經(jīng)存在文件:' + crc32Dict.get(crc))
print('重復(fù)文件:' + 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\**\*")
總結(jié)
本篇介紹了 glob 模塊的用法和 crc32 值的計(jì)算,大家學(xué)廢了嗎?
更多關(guān)于python清理重復(fù)緩存文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)的多線程http壓力測試代碼
這篇文章主要介紹了Python實(shí)現(xiàn)的多線程http壓力測試代碼,結(jié)合實(shí)例形式分析了Python多線程操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02
python打印異常信息的兩種實(shí)現(xiàn)方式
今天小編就為大家分享一篇python打印異常信息的兩種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Python實(shí)現(xiàn)拷貝多個(gè)文件到同一目錄的方法
這篇文章主要介紹了Python實(shí)現(xiàn)拷貝多個(gè)文件到同一目錄的方法,涉及Python針對文件與目錄的遍歷、復(fù)制等相關(guān)操作技巧,需要的朋友可以參考下2016-09-09
Python用戶推薦系統(tǒng)曼哈頓算法實(shí)現(xiàn)完整代碼
這篇文章主要介紹了Python用戶推薦系統(tǒng)曼哈頓算法實(shí)現(xiàn)完整代碼,簡單介紹了曼哈頓距離的定義,然后分享了其Python實(shí)現(xiàn)代碼,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12
使用PyTorch將數(shù)據(jù)從CPU移動(dòng)到GPU的四個(gè)方法
這篇文章給大家介紹了在 PyTorch 中,將數(shù)據(jù)從 CPU 移動(dòng)到 GPU 的幾種方法,使用 .to() 方法,使用 .cuda() 方法,使用 torch.Tensor 構(gòu)造函數(shù)和使用 torch.tensor 構(gòu)造函數(shù)這四個(gè)方法,通過代碼示例介紹非常詳細(xì),需要的朋友可以參考下2024-01-01

