递归删除2年以上的文件(具有.zip,.log等特定扩展名)

时间:2019-04-23 19:41:15

标签: python-3.7

我是Python的新手,想编写一个脚本来递归删除目录(及其子目录)中超过2年且具有特定扩展名(如.zip,.txt等)的文件。

1 个答案:

答案 0 :(得分:0)

我知道这不是GitHub,但是:我花了很多时间试图弄清楚,我不得不承认答案不是那么明显,但我发现了 最终。我不知道为什么我花了半个小时在这个随机程序上,但是我做到了。 幸运的是,我也使用python 3.7,因为我在帖子底部没有看到您的标签。 This Image是我运行名为“程序”的演示

功能

-删除目录和子目录中的所有文件
-可以将扩展名更改为所需的扩展名,例如:txt,bat,png,jpg
-可让您将要删除的文件夹更改为所需的文件夹,例如从C盘更改为图片

程序

import glob,os,sys,re,datetime

os.chdir("C:\\Users\\") # ------> PLEASE CHANGE THIS TO PREVENT YOUR C DRIVE GETTING DESTROYED THIS IS JUST AN EXAMPLE
src = os.getcwd()#Scans src which must be set to the current working directory 
cn = 0
filedate = '2019'
clrd = 0
def random_function_name():
  print("No files match the given criteria!")
  return;

def find(path, *exts):
    dirs = [a[0] for a in os.walk(path)]
    f_filter = [d+e for d in dirs for e in exts]    
    return [f for files in [glob.iglob(files) for files in f_filter] for f in files]
print(src)
my_files = find(src,'\*py', '\*txt') #you can also add parameters like '\*txt', '\*jpg' ect
for f in my_files:
  cn += 1
  if filedate in datetime.datetime.fromtimestamp(os.path.getctime(f)).strftime('%Y/%m/%d|%H:%M:%S'):
    print(' | CREATED:',datetime.datetime.fromtimestamp(os.path.getctime(f)).strftime('%Y/%m/%d|%H:%M:%S'),'|', 'Folder:','[',os.path.basename(os.path.dirname(f)),']', 'File:', os.path.split(os.path.abspath(f))[1], ' Bytes:', os.stat(f).st_size)
    clrd += os.stat(f).st_size
  def delete():
    if cn != 0:
      x = str(input("Delete {} file(s)? >>> ".format(cn)))
      if x.lower() == 'yes':
        os.remove(f)
        print("You have cleared {} bytes of data".format(clrd))
        sys.exit()
      if x.lower() == 'no':
        print('Aborting...')
        sys.exit()
      if x != 'yes' or 'no':
        if x != '': 
          print("type yes or no")
          delete()
        else: delete()
    if cn == 0:
      print(str("No files to delete."))
      sys.exit()

delete()


if filedate not in datetime.datetime.fromtimestamp(os.path.getctime(f)).strftime('%Y/%m/%d|%H:%M:%S'):
  sys.setrecursionlimit(2500)
random_function_name()

靠自己

这是将其应用于您自己的代码

    import glob,os,sys,re,datetime

    os.chdir('C:\\Users')
    src = os.getcwd()

    def find(path, *exts):
        dirs = [a[0] for a in os.walk(path)]
        f_filter = [d+e for d in dirs for e in exts]    
        return [f for files in [glob.iglob(files) for files in f_filter] for f in files]

    my_files = find(src,'\*py', '\*txt') #to add extensions do \*extension 
    for f in my_files:
      if filedate in datetime.datetime.fromtimestamp(os.path.getctime(f)).strftime('%Y/%m/%d|%H:%M:%S'):
        os.remove(f)