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()
对目录下保留最后的zip文件:
zipfiles=[os.path.join(zipdir,f)
defKeepLastNumZips(num)
defextractTime(f):
returnos.path.getctime(f)
forfinos.listdir(zipdir)
ifos.path.splitext(f)[1]==".zip"]
iflen(zipfiles)>num:
zipfiles.sort(key=extractTime,reverse=True)
foriinrange(num,len(zipfiles)):
os.remove(zipfiles[i])
相关文章