相信很多小伙伴都知道,軟件在使用的過(guò)程中都會(huì)產(chǎn)生緩存數(shù)據(jù)的,而且長(zhǎng)期不清理會(huì)導(dǎo)致占用空間越來(lái)越大,可能影響電腦的運(yùn)行速度,我們常用的微信也是這樣,微信緩存自動(dòng)清理工具采用python語(yǔ)言編寫(xiě),不需要安裝,支持自動(dòng)清理微信所產(chǎn)生的緩存,并且不會(huì)刪除重要數(shù)據(jù)。
微信緩存自動(dòng)清理工具特色
自動(dòng)通過(guò)注冊(cè)表、微信配置文件和手動(dòng)輸入判斷企業(yè)微信和微信的緩存目錄,并自動(dòng)清理不重要數(shù)據(jù)
微信緩存自動(dòng)清理工具代碼
import os
import re
from time import sleep
import shutil
import winreg
from pathlib import Path
import configparser
# 記錄一下所有垃圾的總大小
total_trash_size = 0
def get_reg_dir(software):
if software == "微信":
try:
string = r'SOFTWARE\Tencent\WeChat'
handle = winreg.OpenKey(winreg.HKEY_CURRENT_USER, string, 0, (winreg.KEY_WOW64_64KEY + winreg.KEY_READ))
location, _type = winreg.QueryValueEx(handle, "FileSavePath")
return location
except :
return False
elif software == "企業(yè)微信":
try:
string = r'SOFTWARE\Tencent\WXWork'
handle = winreg.OpenKey(winreg.HKEY_CURRENT_USER, string, 0, (winreg.KEY_WOW64_64KEY + winreg.KEY_READ))
location, _type = winreg.QueryValueEx(handle, "DataLocationPath")
return location
except :
return False
def get_software_dir(software):
if software == "微信":
if os.path.exists('D:/wx_path.ini'):
try:
cf = configparser.ConfigParser()
cf.read('D:/wx_path.ini',encoding='utf-8')
wx_path = cf.get("weixin","wx_path")
return Path(wx_path)
except Exception as e:
print(e)
if Path(Path.home() / "Documents" / "WeChat Files").is_file():
wx_path = Path(Path.home() / "Documents" / "WeChat Files")
return Path(wx_path)
if os.path.exists(Path.home() /'AppData'/'Roaming'/'Tencent'/'WeChat'/'All Users'/'config'/'3ebffe94.ini'):
try:
with open(Path.home() /'AppData'/'Roaming'/'Tencent'/'WeChat'/'All Users'/'config'/'3ebffe94.ini', "r") as f: # 打開(kāi)文件
wx_path = Path(str(f.read())+"/WeChat Files") # 讀取文件
if os.path.exists(wx_path):
return wx_path
except Exception as e:
print(e)
if os.path.exists(Path.home() /'AppData'/'Roaming'/'Tencent'/'WeChat'/'All Users'/'config'/'b928cd74.ini'):
try:
with open(Path.home() /'AppData'/'Roaming'/'Tencent'/'WeChat'/'All Users'/'config'/'b928cd74.ini', "r") as f: # 打開(kāi)文件
wx_path = Path(str(f.read())+"/WeChat Files") # 讀取文件
if os.path.exists(wx_path):
return wx_path
except Exception as e:
print(e)
if get_reg_dir("微信"):
return Path(get_reg_dir("微信"))
wx_path = Path(input("未找到微信緩存目錄!請(qǐng)手動(dòng)輸入:"))
os.chdir('D:/')
cf = configparser.ConfigParser()
cf.add_section("weixin")
cf.set("weixin","wx_path",str(wx_path))
with open('D:/wx_path.ini',"a") as f:
cf.write(f)
return Path(str(wx_path))
else:
Path('D:/wx_path.ini').touch()
wx_path = Path(input("未找到微信緩存目錄!請(qǐng)手動(dòng)輸入:"))
os.chdir('D:/')
cf = configparser.ConfigParser()
cf.add_section("weixin")
cf.set("weixin","wx_path",str(wx_path))
with open('D:/wx_path.ini',"a") as f:
cf.write(f)
return Path(str(wx_path))
elif software == "企業(yè)微信":
if os.path.exists('D:/wx_path.ini'):
try:
cf = configparser.ConfigParser()
cf.read('D:/wx_path.ini',encoding='utf-8')
qywx_path = cf.get("qyweixin","qywx_path")
return Path(qywx_path)
except Exception as e:
print(e)
if Path(Path.home() / "Documents" / "WXWork").is_file():
wkchat_dir = Path(Path.home() / "Documents" / "WXWork")
return wkchat_dir
if get_reg_dir("企業(yè)微信"):
return Path(get_reg_dir("企業(yè)微信"))
qywx_path = Path(input("未找到企業(yè)微信緩存目錄!請(qǐng)手動(dòng)輸入:"))
os.chdir('D:/')
cf = configparser.ConfigParser()
cf.add_section("qyweixin")
cf.set("qyweixin","qywx_path",str(qywx_path))
with open('D:/wx_path.ini',"a") as f:
cf.write(f)
return Path(qywx_path)
else:
Path('D:/wx_path.ini').touch()
qywx_path = Path(input("未找到微信緩存目錄!請(qǐng)手動(dòng)輸入:"))
os.chdir('D:/')
cf = configparser.ConfigParser()
cf.add_section("qyweixin")
cf.set("qyweixin","qywx_path",str(qywx_path))
with open('D:/wx_path.ini',"a") as f:
cf.write(f)
return Path(qywx_path)
def remove_wxtrash():
"""刪除微信的所有緩存"""
global total_trash_size
# 找到微信的存儲(chǔ)目錄
wechat_dir = get_software_dir("微信")
print(wechat_dir)
# 記錄所有垃圾文件和文件夾的路徑,用來(lái)之后進(jìn)行刪除
trash_list = []
print('開(kāi)始掃描微信的緩存文件...')
print('=' * 30)
# All Users 目錄存儲(chǔ)了所有登錄過(guò)的用戶使用過(guò)的頭像
trash_list.extend(find_trash(Path(os.environ.get('USERPROFILE') +'/AppData/Local/Temp'), title='系統(tǒng)緩存文件'))
trash_list.extend(find_trash(wechat_dir / "All Users", '*', '已登錄過(guò)用戶的頭像圖片'))
# Applet 目錄存儲(chǔ)了所有小程序的緩存
trash_list.extend(find_trash(wechat_dir / "Applet", '*', '公用小程序緩存'))
# 獲取所有登錄過(guò)的用戶產(chǎn)生的緩存文件
for d in wechat_dir.iterdir():
if d.name not in ['Applet', 'All Users']:
try:
name = re.split("\\\\",str(d))[-1]
print(f'{name} 的目錄下,共發(fā)現(xiàn):')
except :
pass
trash_list.extend(find_trash(d / 'Applet', title='小程序緩存',indent=1))
# Attachment,Backup,BackupFiles,CustomEmotions 都是空的
# Data 不知道干什么用的,但是不大,先不刪了
# FavTemp 不知道是什么,但是應(yīng)該沒(méi)用,可以刪
trash_list.extend(find_trash(d / 'FavTemp', title='其他緩存',indent=1))
# 表情包文件緩存
trash_list.extend(find_trash(d / 'CustomEmoV1', title='表情文件緩存'))
trash_list.extend(find_trash(d / 'ResUpdate', title='未知垃圾文件',indent=1))
trash_list.extend(find_trash(d / 'ResUpdateV2', title='其他垃圾文件',indent=1))
# Image, Video, Files 都是空的
# 其下是以形如 2020-06 的文件夾存儲(chǔ)的各種圖片縮略圖緩存文件
trash_list.extend(find_trash(d / 'FileStorage' / 'Cache', title='縮略圖文件',indent=1))
# 又又又一個(gè)表情圖片緩存
trash_list.extend(find_trash(d / 'FileStorage' / 'CustomEmotion', title='自定義表情文件緩存',indent=1))
# 下載到本地的文件
trash_list.extend(find_trash(d / 'FileStorage' / 'File', title='已下載文件',indent=1))
# 未知緩存文件,在微信運(yùn)行中被占用,無(wú)法刪除
trash_list.extend(find_trash(d / 'FileStorage' / 'Fav', title='未知文件',indent=1))
# 圖片文件
trash_list.extend(find_trash(d / 'FileStorage' / 'Image', title='圖片數(shù)據(jù)文件',indent=1))
# 視頻文件
trash_list.extend(find_trash(d / 'FileStorage' / 'Video', title='視頻文件',indent=1))
# 表情包圖標(biāo)文件
trash_list.extend(find_trash(d / 'FileStorage' / 'General' / 'Data', title='表情圖標(biāo)文件',indent=1))
# 高清頭像圖片
trash_list.extend(find_trash(d / 'FileStorage' / 'General' / 'HDHeadImage', title='高清頭像圖片',indent=1))
# ResUpdate 里面只有損壞的壓縮包,不知道是干什么用的,但肯定沒(méi)卵用
print('=' * 30)
print(f'總垃圾大。簕total_trash_size:.3f} MB')
# print('請(qǐng)注意,以上垃圾包含所有下載(點(diǎn)開(kāi))過(guò)的圖片、視頻、文本文件,請(qǐng)謹(jǐn)慎刪除!')
# user_input = input('是否清除全部垃圾?y(es)/n(o) > ')
# if user_input.lower() not in ['y', 'yes']:
# return
print('開(kāi)始清理垃圾...')
for p in trash_list:
if not remove_file_or_folder(p):
print(p)
total_trash_size -= get_size(p)
print(f'本次共清理微信垃圾 {total_trash_size:.3f} MB')
def remove_wktrash():
"""刪除企業(yè)微信的所有緩存"""
global total_trash_size
# 找到微信的存儲(chǔ)目錄
wkchat_dir = get_software_dir("企業(yè)微信")
print(wkchat_dir)
# 記錄所有垃圾文件和文件夾的路徑,用來(lái)之后進(jìn)行刪除
trash_list = []
print('開(kāi)始掃描企業(yè)微信的緩存文件...')
print('=' * 30)
# All Users 目錄存儲(chǔ)了所有登錄過(guò)的用戶使用過(guò)的頭像
for d in wkchat_dir.iterdir():
try:
name = re.split("\\\\",str(d))[-1]
print(f'{name} 的目錄下,共發(fā)現(xiàn):')
except :
pass
trash_list.extend(find_trash(d / "Avator", '*', '已登錄過(guò)用戶的頭像圖片',indent=1))
# Applet 目錄存儲(chǔ)了所有小程序的緩存
trash_list.extend(find_trash(d / "Cache", '*', '緩存',indent=1))
trash_list.extend(find_trash(d / "Emotion", '*', '表情包',indent=1))
trash_list.extend(find_trash(d / "WeDrive", '*', '網(wǎng)盤(pán)文件',indent=1))
print('=' * 30)
print(f'總垃圾大。簕total_trash_size:.3f} MB')
# print('請(qǐng)注意,以上垃圾包含所有下載(點(diǎn)開(kāi))過(guò)的圖片、視頻、文本文件,請(qǐng)謹(jǐn)慎刪除!')
# user_input = input('是否清除全部垃圾?y(es)/n(o) > ')
# if user_input.lower() not in ['y', 'yes']:
# return
print('開(kāi)始清理垃圾...')
for p in trash_list:
if not remove_file_or_folder(p):
print(p)
total_trash_size -= get_size(p)
print(f'本次共清理企業(yè)微信垃圾 {total_trash_size:.3f} MB')
def find_trash(d: Path, glob='*', title='緩存', indent=0):
"""獲取某個(gè)垃圾文件夾的信息"""
if not d.exists():
return []
global total_trash_size
total_size = 0
trash_list = []
for p in d.glob(glob):
total_size += get_size(p)
trash_list.append(p)
# 如果傳入 title 為空,則不輸出信息,僅記錄垃圾文件的路徑
if not title:
return trash_list
# 開(kāi)頭的縮進(jìn)
if indent > 0:
title = '\t' * indent + title
# 輸出信息
print(f'{title}:{total_size:.3f} MB')
total_trash_size += total_size
return trash_list
def remove_file_or_folder(p: Path):
"""刪除文件或文件夾"""
try:
if p.is_file():
p.unlink()
elif p.is_dir():
shutil.rmtree(p.absolute())
else:
# 見(jiàn)鬼去吧
pass
return True
except:
print(f'無(wú)法刪除 {p.absolute()}')
return False
def get_size(p: Path):
"""獲取一個(gè)文件或文件夾的大小"""
# 如果是文件
if p.is_file():
return p.stat().st_size / 1048576 # 以 MB 為單位
# 如果是文件夾
elif p.is_dir():
# 獲取其下所有文件的大小之和
return sum([get_size(f) for f in p.rglob('*') if f.is_file()])
# 我不知道除了文件和文件夾以外還有別的什么類(lèi)型,但是如果有,讓它見(jiàn)鬼去吧
return 0
if __name__ == "__main__":
remove_wxtrash()
sleep(5)
remove_wktrash()
sleep(20)
什么是緩存?
緩存指在下載過(guò)程中暫時(shí)存放數(shù)據(jù)的一塊內(nèi)存區(qū)域。緩存能夠有效的避免程序?qū)τ脖P(pán)進(jìn)行頻繁地寫(xiě)操作。是指臨時(shí)文件交換區(qū),手機(jī)把最常用的文件從存儲(chǔ)器里提出來(lái)臨時(shí)放在緩存里,就像把工具和材料搬上工作臺(tái)一樣,這樣會(huì)比用時(shí)現(xiàn)去倉(cāng)庫(kù)取更方便。因?yàn)榫彺嫱褂玫氖荝AM,斷電即掉的非永久儲(chǔ)存,所以在忙完后還是會(huì)把文件送到手機(jī)存儲(chǔ)器里。緩存能夠有效的避免電驢程序?qū)τ脖P(pán)進(jìn)行頻繁地寫(xiě)操作,因?yàn)楫?dāng)你設(shè)置了緩存以后,只有暫存的數(shù)據(jù)達(dá)到指定大小以后才會(huì)被寫(xiě)入硬盤(pán)。
熱門(mén)評(píng)論
最新評(píng)論