-
Notifications
You must be signed in to change notification settings - Fork 2
/
delete_file.py
135 lines (114 loc) · 4.18 KB
/
delete_file.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import time
import datetime
import operator
def is_valid_date(str_date):
# 判断是否是一个有效的日期字符串
try:
if ":" in str_date:
time.strptime(str_date, "%Y-%m-%d %H:%M:%S")
else:
time.strptime(str_date, "%Y-%m-%d")
return True
except:
return False
# 自定义函数
def get_file(path_name, prefix, suffix, array):
# 在函数中释放一个list所占内存
del array[:]
# 清空list
# array.clear()
# 获取文件list数组
files_list = os.listdir(path_name)
# 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:]
# 对文件名拆分
show_count = fileName.count(".")
if (show_count > 0):
print("文件名中'.'出现的次数:" + str(show_count))
split = fileName.split(".")
# 获取文件前缀
prefix = split[0]
# 获取文件后缀,并去掉.
suffix = split[1].strip(".")
L = []
# 调用自定义函数
L = get_file(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 = get_file(pathName, prefix, suffix, L)
print("保留的文件:", newL)
else:
print("没有可删除文件".center(20,"*"))
print("".center(40,"="))