您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/3/1 21:09:10发布14次查看
使用:
代码如下:
foldercleanup.py -d 10 -k c:\test\keepfile.txt c:\test
表示对c:\test目录只保留最近10天的子文件夹和keepfile.txt中指定的子文件夹。代码:
代码如下:
import os
import os.path
import datetime
def getoption():
  from optparse import optionparser
des   = clean up the folder with some options
  prog  = foldercleanup
  ver   = %prog 0.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=keep the subfolders which are created in recent %days% days)
  p.add_option('-k','--keepfile',action='store',type='string',dest='keepfile',help=keep the subfolders which are recorded in text file %keepfile% )
  options, arguments = p.parse_args()
if len(arguments) != 1:
    print(error: must input one directory as only one parameter )
    return
return options.days, options.keepfile, arguments[0]
def precheckdir(dir):
  if(not os.path.exists(dir)):
    print(error: the directory your input is not existed)
    return
  if(not os.path.isdir(dir)):
    print (error: the parameter your input is not a directory)
    return
return os.path.abspath(dir)
def iskeepbyday(dir, day):
  indays = false
  if( day is not none) :
    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)
  return indays
def iskeepbykeepfile(dir, keepfile):
  needkeep = false
  print (dir)
  if (keepfile is not none):
    try :
      kf = open(keepfile,r)
      for f in kf.readlines():
        print (f)
        if (dir.upper().endswith(\\ + f.strip().upper())):
          needkeep = true
      kf.close()
    except:
      print (error: keep file cannot be opened)
  print(needkeep)
  return needkeep
def removesubfolders(dir, day, keepfile):
  subdirs = os.listdir(dir)
  for subdir in subdirs:
    subdir = os.path.join(dir,subdir)
    if ( not os.path.isdir(subdir)):
      continue
    print(----------------------)
    if( (not iskeepbyday(subdir, day))and (not iskeepbykeepfile(subdir, keepfile))):
      print(remove subfolder: + subdir)
      import shutil
      shutil.rmtree(subdir,true)
def foldercleanup():
  (day, keepfile, dir) = getoption()
  dir = precheckdir(dir)
  if dir is none:
    return
  removesubfolders(dir,day,keepfile)
if __name__=='__main__':
  foldercleanup()
对目录下保留最后的zip文件:
代码如下:
def keeplastnumzips(num)
    def extracttime(f):
        return os.path.getctime(f)
    zipfiles = [os.path.join(zipdir, f)
                for f in os.listdir(zipdir)
                if os.path.splitext(f)[1] == .zip]
    if len(zipfiles) > num:
        zipfiles.sort(key=extracttime, reverse=true)
        for i in range(num, len(zipfiles)):
            os.remove(zipfiles[i])
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product