目录

  • 前言
  • 环境准备
  • 初步分析
  • 代码编辑
  • 导库
  • 主体
  • 用户确认进入
  • 用户需要重新选择文件夹
  • 用户退出程序
  • 结语


前言

哈罗!大家好呀,我是落枕!
最近突发奇想,想要整一个自动缓存清理程序,因为很多人都在用 广告软件 杀毒软件360清除缓存,秉持着 造福大众


环境准备

编辑器:pycharm64
运行环境:python3.7.0
系统环境:win7(windows7以上应该都可以)


初步分析

这个项目的关键点就在于要找到缓存文件夹
看过抖音 某些营销号

%temp%

于是乎,我输入了一下,查找缓存文件的位置

python 清空recv 函数 缓冲区_python


然后我发现我们的缓存文件夹路径是酱紫的:

C:\Users\xxxxxxx\AppData\Local\Temp

(我把计算机名称换成了x)
也就是说我的缓存文件位置是:

C:\Users\[computer name]\AppData\Local\Temp

咳咳,这里说一下,这个可能只适合我的电脑[皮]
那么文件目录找到了我们就可以开始操作啦!


代码编辑

导库

这个项目不需要第三方库
我们需要用到的库有:

os:删除文件
shutil:删除文件夹
time
tkinter.filedialog:可让用户自己选择缓存文件夹
socket:获取用户主机名
import os
import shutil
from time import time, sleep
from tkinter.filedialog import askdirectory
import socket

主体

首先,我们要获取用户主机的名字
然后输出这个名字
可以用到方法socket.gethostname()

name = socket.gethostname()
name = name.split("-")
del(name[-1])
print(f"您的计算机名为:{socket.gethostname()}")

之所以加上del(name[-1])是因为我获取到的名字后面有一个-PC我要把它去掉


接着我们用主机名确认缓存文件夹的目录并让用户确认进入程序:

path = f"C://Users//{name[-1]}//AppData//Local//Temp"
enter = input(f"-欢迎来到缓存清理中心,是否开始清理?\n-清理目标目录:{path}-\n(Y/n/目录不正确,重新选择c):")

然后判断用户的行为:

if enter.upper() == "Y":
	···
elif enter.upper() == "C":
	···
else:
	···

用户确认进入

我们就可以加上程序代码了
首先是获取目录下的所有文件

files1 = os.listdir(path)
    print(f"找到文件(夹):{files1}")

如果愿意,可以加上一个计时

a = time()
	···
	b = time()

接着开始删除文件和文件夹:

for file in files1:
        file_path = path + "//" + file
        try:
            os.remove(file_path)
            print(f"-已经删除文件(文件名:{file})-")
        except PermissionError:
            continue

    files2 = os.listdir(path)
    for file in files2:
        file_path = path + "//" + file
        try:
            shutil.rmtree(file_path)
            print(f"-已经删除文件夹(文件夹名:{file})-")
        except NotADirectoryError:
            continue
        except PermissionError:
            continue

在两个for循环里面要加上try-except语句,应为有的缓存是没办法删除的,会报错
第二个for循环要检查NotADirectoryError,因为程序在删除的时候会找到第一轮循环没有删除的文件,而用rmtree()方法再次删除会报错


最后输出结果即可

print(f"\n-总共用时{b-a}秒-")
    print("-已经删除缓存文件夹中非共享文件与非使用文件-")
    print("\n-60秒后自动退出进程-")
    sleep(60)

用户需要重新选择文件夹

这一步很简单,只要加上文件夹选择框即可~

os.system("cls")
    print("-请选择目录-\n(缓存目录位于:C:/Users/[computer name]/AppData/Local/Temp,或者在命令提示符中输入%temp%即可):")
    choosepath = askdirectory(title="选择缓存文件夹的位置")
    if choosepath == "":
        choosepath = "C://Users//zhengy1//AppData//Local//Temp"
        print(f"-检测到您没有选择任何文件夹,已经为您选择默认文件夹:{choosepath}-\n-5秒后进入下一个页面-")
        sleep(5)

加上一层条件判断是因为放置用户没有选择任何文件夹然后误删系统文件
接下来的内容就差不多了

os.system("cls")
    choose_enter = input(f"-是否开始清理?-\n-清理目标目录:{choosepath}-\n(Y/n):")
    if choose_enter.upper() == "Y":
        files1 = os.listdir(path)
        print(f"找到文件(夹):{files1}")
        a = time()
        for file in files1:
            file_path = path + "//" + file
            try:
                os.remove(file_path)
                print(f"-已经删除文件(文件名:{file})-")
            except PermissionError:
                continue

        files2 = os.listdir(path)
        for file in files2:
            file_path = path + "//" + file
            try:
                shutil.rmtree(file_path)
                print(f"-已经删除文件夹(文件夹名:{file})-")
            except NotADirectoryError:
                continue
            except PermissionError:
                continue
        b = time()

        print(f"-总共用时{b-a}秒-")
        print("\n-已经删除缓存文件夹中非共享文件与非使用文件-")
        print("\n-60秒后自动退出进程-")
        sleep(60)
    else:
        print("\n-10秒后退出进程-")
        sleep(10)

用户退出程序

很简单,补一下else语句即可

else:
    print("\n-10秒后退出进程-")
    sleep(10)

最后亮一下源代码:

# !/usr/bin/python3
# -*- coding: utf-8 -*-
import os
import shutil
from time import time, sleep
from tkinter.filedialog import askdirectory
import socket
name = socket.gethostname()
name = name.split("-")
del(name[-1])
print(f"您的计算机名为:{socket.gethostname()}")
path = f"C://Users//{name[-1]}//AppData//Local//Temp"
enter = input(f"-欢迎来到缓存清理中心,是否开始清理?\n-清理目标目录:{path}-\n(Y/n/目录不正确,重新选择c):")
if enter.upper() == "Y":
    files1 = os.listdir(path)
    print(f"找到文件(夹):{files1}")
    a = time()
    for file in files1:
        file_path = path + "//" + file
        try:
            os.remove(file_path)
            print(f"-已经删除文件(文件名:{file})-")
        except PermissionError:
            continue

    files2 = os.listdir(path)
    for file in files2:
        file_path = path + "//" + file
        try:
            shutil.rmtree(file_path)
            print(f"-已经删除文件夹(文件夹名:{file})-")
        except NotADirectoryError:
            continue
        except PermissionError:
            continue
    b = time()

    print(f"\n-总共用时{b-a}秒-")
    print("-已经删除缓存文件夹中非共享文件与非使用文件-")
    print("\n-60秒后自动退出进程-")
    sleep(60)
elif enter.upper() == "C":
    os.system("cls")
    print("-请选择目录-\n(缓存目录位于:C:/Users/[computer name]/AppData/Local/Temp,或者在命令提示符中输入%temp%即可):")
    choosepath = askdirectory(title="选择缓存文件夹的位置")
    if choosepath == "":
        choosepath = "C://Users//zhengy1//AppData//Local//Temp"
        print(f"-检测到您没有选择任何文件夹,已经为您选择默认文件夹:{choosepath}-\n-5秒后进入下一个页面-")
        sleep(5)
    os.system("cls")
    choose_enter = input(f"-是否开始清理?-\n-清理目标目录:{choosepath}-\n(Y/n):")
    if choose_enter.upper() == "Y":
        files1 = os.listdir(path)
        print(f"找到文件(夹):{files1}")
        a = time()
        for file in files1:
            file_path = path + "//" + file
            try:
                os.remove(file_path)
                print(f"-已经删除文件(文件名:{file})-")
            except PermissionError:
                continue

        files2 = os.listdir(path)
        for file in files2:
            file_path = path + "//" + file
            try:
                shutil.rmtree(file_path)
                print(f"-已经删除文件夹(文件夹名:{file})-")
            except NotADirectoryError:
                continue
            except PermissionError:
                continue
        b = time()

        print(f"-总共用时{b-a}秒-")
        print("\n-已经删除缓存文件夹中非共享文件与非使用文件-")
        print("\n-60秒后自动退出进程-")
        sleep(60)
    else:
        print("\n-10秒后退出进程-")
        sleep(10)
else:
    print("\n-10秒后退出进程-")
    sleep(10)

结语