前段时间寝室的个同胞,刚买电脑不久,然后让它用工具删系统垃圾都不会,实在没办法 用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肯定是可行的
不过我当时没有想到这个,当时写的时候就来了个最傻的方法
|