zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python实现的文件夹清理程序分享

Python程序 实现 分享 文件夹 清理
2023-06-13 09:15:31 时间

使用:

复制代码代码如下:

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文件:

复制代码代码如下:
defKeepLastNumZips(num)
   defextractTime(f):
       returnos.path.getctime(f)

   zipfiles=[os.path.join(zipdir,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])