首页 > 学技术 > 技术网文 > Python > 正文

[保留] Windows下删除系统垃圾的脚本


来源 chinaunix.net 酷勤网整理

前段时间寝室的个同胞,刚买电脑不久,然后让它用工具删系统垃圾都不会,实在没办法 用python给他写了个,当然只有最简单的功能

#coding:utf-8
import os
#from glob import glob

if os.name == 'nt':
if 'HOMEPATH' in os.environ:
home = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH']
else:
home = os.environ['HOMEPATH']

workpath = os.path.join(home,'Local Settings')
#递归删除文件
#里面和下面的函数用try是抛出删除正在使用的零时文件出错
def delfile(path):
for file in os.listdir(path):     
if os.path.isfile(os.path.join(path,file)):
try:
print "\n删除垃圾文件: %s" % (os.path.join(path,file))
os.remove(os.path.join(path,file))
except:
pass
elif os.path.isdir(os.path.join(path,file)):
delfile(os.path.join(path,file)) 
else:
pass
delfile(os.path.join(workpath,'Temp'))
delfile(os.path.join(workpath,'Temporary Internet Files'))
#删除文件家的时候必须为空文件夹,而且只能从最里层删起
def deldir(pa):
for i in os.listdir(pa):
if os.path.isdir(os.path.join(pa,i)):
if len(os.listdir(os.path.join(pa,i))) > 0:
deldir(os.path.join(pa,i))
try:
os.rmdir(os.path.join(pa,i))
except:
pass
else:
try:
print "\n删除文件夹 %s" % (os.path.join(pa,i))
os.rmdir(os.path.join(pa,i))
except:
pass

deldir(os.path.join(workpath,'Temp'))
deldir(os.path.join(workpath,'Temporary Internet Files'))
print """
     系统产生的零时垃圾文件清理完毕!
     """
raw_input("请按回车键退出!")




然后用cx_freeze给他弄成了exe,让它电脑时间晚长了就双击一次

[ 本帖最后由 wolfg 于 2006-5-11 21:37 编辑 ]



 Ericzhao82 回复于:2006-04-30 10:35:58

呵呵,支持下

看来问题不怕解决不了,就怕发现不了问题。


 nemanman 回复于:2006-04-30 17:47:15

我觉得你删除文件夹的那几句很可笑


 ghostwwl 回复于:2006-05-01 09:11:26

楼上 有没有什么好点的办法!
其实我可以告诉你,windows底层的文件删除 原理 基本跟这个差不多
删除一个有文件的多级文件夹 先删掉文件,然后嘴从里层开始删除文件夹知道最外层。


 ghostwwl 回复于:2006-05-01 09:17:15

下面这个是在pywin的手册上找到的代码 一个关于删除文件夹的


def del_dir(self,path):

for file in os.listdir(path):

file_or_dir = os.path.join(path,file)

if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):

del_dir(file_or_dir) #it's a directory reucursive call to function again

else:

try:

os.remove(file_or_dir) #it's a file, delete it

except:

#probably failed because it is not a normal file

win32api.SetFileAttributes(file_or_dir, win32con.FILE_ATTRIBUTE_NORMAL)

os.remove(file_or_dir) #it's a file, delete it

os.rmdir(path) #delete the directory here



 nemanman 回复于:2006-05-01 23:23:13

为什么不换个方式? 比如用 os.system("rmdir dirpath /s /q")

当然我还是觉得你的方式稳妥,只是我喜欢最简练的


 ghostwwl 回复于:2006-05-02 00:30:16

那天也是实在没什么事,新闻业看完了,然后就想到写这个,当然方法很多的,如果想简单,其实用批处理都可以写的


 ghostwwl 回复于:2006-05-05 20:21:20

代码很累赘 改了下

#coding=utf-8
import os

#得到系统的home目录例如'C:\\Documents and Settings\\Administrator'
def gethome():
if os.name == 'nt':
if 'HOMEPATH' in os.environ:
home = os.environ['HOMEDRIVE'] + os.environ['HOMEPATH']
else:
home = os.environ['HOMEPATH']
return home

def deldir(pa):
for file in os.listdir(pa):
#如果是文件就删除
file_or_dir = os.path.join(pa,file)
if os.path.isfile(file_or_dir):
try:
print "\n删除垃圾文件:  %s" % file_or_dir
os.remove(file_or_dir)
except:
pass

elif os.path.isdir(file_or_dir):
#如果是文件夹并且不为空递归删除,递归完后,就为空了所以回归删除目录
if len(os.listdir(file_or_dir))>0:
deldir(file_or_dir)
try:
print "\n删除文件夹 %s" % file_or_dir
os.rmdir(file_or_dir)
except:
pass
#其它的情况,如果目录为空直接删除目录
else:
try:
print "\n删除文件夹 %s" % file_or_dir
os.rmdir(file_or_dir)
except:
pass
else:
pass

if __name__=='__main__':
home = gethome()
workpath = os.path.join(home,'Local Settings')
deldir(os.path.join(workpath,'Temp'))
deldir(os.path.join(workpath,'Temporary Internet Files'))
#删除最近打开的文件记录历史
#delpaht(os.path.join(home,'Recent')
print """
系统产生的零时垃圾文件清理完毕!
"""
raw_input("""请按回车键退出!""")


[ 本帖最后由 ghostwwl 于 2006-5-8 19:39 编辑 ]


 ghostwwl 回复于:2006-05-08 19:40:59

才发现 那个代码贴上去的 里面我掉了一个括号 然后还打错了2个字母 
嘿嘿 在家里的时候一直通不过 今天无意看到的


 wolfg 回复于:2006-05-11 21:36:23

试试os.walk方法

walk( top[, topdown=True [, onerror=None]]) 

manual里的例子,可供参考,注意它的注释里的提示

# Delete everything reachable from the directory named in 'top',
# assuming there are no symbolic links.
# CAUTION:  This is dangerous!  For example, if top == '/', it
# could delete all your disk files.
import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))



 ghostwwl 回复于:2006-05-12 22:57:35

楼上的这个os.walk肯定是可行的
不过我当时没有想到这个,当时写的时候就来了个最傻的方法




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=748647
转载请注明作者名及原文出处



收藏本页到: