python实现的文件夹清理程序分享
使用:
foldercleanup.py-d10-kc:\test\keepfile.txtc:\test
表示对c:\test目录只保留最近10天的子文件夹和keepfile.txt中指定的子文件夹。
代码:
importos importos.path importdatetime defgetOption(): fromoptparseimportOptionParser des ="cleanupthefolderwithsomeoptions" prog ="foldercleanup" ver ="%prog0.0.1" usage="%prog[options]foldername" p=OptionParser(description=des,prog=prog,version=ver,usage=usage,add_help_option=True) p.add_option('-d','--days',action='store',type='string',dest='days',help="keepthesubfolderswhicharecreatedinrecent%days%days") p.add_option('-k','--keepfile',action='store',type='string',dest='keepfile',help="keepthesubfolderswhicharerecordedintextfile%keepfile%") options,arguments=p.parse_args() iflen(arguments)!=1: print("error:mustinputonedirectoryasonlyoneparameter") return returnoptions.days,options.keepfile,arguments[0]
defpreCheckDir(dir): if(notos.path.exists(dir)): print("error:thedirectoryyourinputisnotexisted") return if(notos.path.isdir(dir)): print("error:theparameteryourinputisnotadirectory") return returnos.path.abspath(dir) defisKeepByDay(dir,day): indays=False if(dayisnotNone): t=os.path.getctime(dir) today=datetime.date.today() createdate=datetime.date.fromtimestamp(t) indate=today-datetime.timedelta(days=int(day)) print(createdate) if(createdate>=indate): indays=True print(indays) returnindays defisKeepByKeepfile(dir,keepfile): needkeep=False print(dir) if(keepfileisnotNone): try: kf=open(keepfile,"r") forfinkf.readlines(): print(f) if(dir.upper().endswith("\\"+f.strip().upper())): needkeep=True kf.close() except: print("error:keepfilecannotbeopened") print(needkeep) returnneedkeep defremoveSubFolders(dir,day,keepfile): subdirs=os.listdir(dir) forsubdirinsubdirs: subdir=os.path.join(dir,subdir) if(notos.path.isdir(subdir)): continue print("----------------------") if((notisKeepByDay(subdir,day))and(notisKeepByKeepfile(subdir,keepfile))): print("removesubfolder:"+subdir) importshutil shutil.rmtree(subdir,True) defFolderCleanUp(): (day,keepfile,dir)=getOption() dir=preCheckDir(dir) ifdirisNone: return removeSubFolders(dir,day,keepfile) if__name__=='__main__': FolderCleanUp()