#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys import time import datetime import operator def is_valid_date(strdate): # 判断是否是一个有效的日期字符串 try: if ":" in strdate: time.strptime(strdate, "%Y-%m-%d %H:%M:%S") else: time.strptime(strdate, "%Y-%m-%d") return True except: return False # 自定义函数 def getFile(pathName, prefix, suffix, array): # 在函数中释放一个list所占内存 del array[:] # 清空list # array.clear() # 获取文件list数组 files_list = os.listdir(pathName) # print(files_list) #当前目录路径 # 遍历路径下的文件 for file in files_list: # 截取文件名 fname = os.path.splitext(file) if fname[0].count(".") <= 0: # strip()删除任意字符,isdigit()判断是否为数字字符串 # if fname[0] == prefix and suffix.isdigit() and fname[1].strip(".").isdigit(): # 添加到list中 # array.append(file) # strip()删除任意字符,isalpha()判断是否为字母字符串 # if fname[0] == prefix and suffix.isalpha() and fname[1].strip(".").isalpha(): # 添加到list中 # array.append(file) # strip()删除任意字符,isalnum()判断是否为字母、数字、字母数字组合 等字符串 if fname[0] == prefix and suffix.isalnum() and fname[1].strip(".").isalnum(): # 添加到list中 array.append(file) else: splits = fname[0].split(".") # is_valid_date判断是否为日期格式 if operator.eq(splits[0], prefix) == 0 and is_valid_date(suffix) and is_valid_date(splits[1]): # 添加到list中 array.append(file) # cmp判断两个字符串,如果相等就为0,如果第一个字符串包含第二个为-1,如果第二个包含第一个为1 elif operator.eq(splits[0], prefix) == 0 and suffix.isalnum() and fname[1].strip(".").isalnum(): # 添加到list中 array.append(file) # 排序 array.sort() return array print("".center(40,"=")) if len(sys.argv) < 3: print("请输入参数:第一个参数为文件路径!第二个参数为保留多少个文件!") print("注意文件名后缀如果为数字那么将只删除后缀为数字的文件,同理后缀为字母或者字母数字组成一样的效果!") quit() print("执行脚本名:", sys.argv[0]) print("".center(40,":")) print(f"执行时间:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print("".center(40,":")) # 参数1为文件路径 parameter = sys.argv[1] # 参数2为要保留的文件个数 keep = int(sys.argv[2]) # for i in range(1, len(sys.argv)): # print "参数:第", i,"个='", sys.argv[i],"'" print("参数:"+parameter) n = parameter.rindex('/') # 从后往前寻找最后一次出现的位置 if n == -1: print("请输入正确的文件路径!") print("".center(40,"=")) quit() # 截取文件路径 pathName = parameter[0:n] # 截取文件名 fileName = parameter[n+1:] # 对文件名拆分 showCount = fileName.count(".") if (showCount > 0): print("文件名中'.'出现的次数:"+str(showCount)) split = fileName.split(".") # 获取文件前缀 prefix = split[0] # 获取文件后缀,并去掉. suffix = split[1].strip(".") L = [] # 调用自定义函数 L = getFile(pathName, prefix, suffix, L) # 获取list长度 leng = len(L) print("查找到"+str(leng)+"个文件!") if leng > keep: if keep > 1: # 循环输入的参数,移除list中元素 # reversed这种索引是按从大到小的顺序排列,就相当于range(5-1,-1,-1) for i in range(keep): del L[leng-(i+1)] elif keep == 1: del L[leng-keep] for i in L: os.remove(pathName+"/"+i) print("删除文件:", i) newL = [] # 调用自定义函数 newL = getFile(pathName, prefix, suffix, L) print("保留的文件:", newL) else: print("没有可删除文件".center(20,"*")) print("".center(40,"="))