现有技术需求:删除超过一定期限(比如60天)的log文件或文件夹,日志格式如下:
2020-05-09_19-07-42 2020-05-09_19-07-744 2020-05-09_19-07-744.xls
2020-05-09_19-07-56 2020-05-09_19-07-744.txt 2020-05-09_19-07-78
有两个技术点:1.如何判断文件或文件夹超过60天; 2.如何有效删除文件或者文件夹
下面逐个击破
1. 判断文件或文件夹超过60天:datetime.datetime.strptime
可以看到,目标文件和文件夹都是以日期格式进行存储的,这样就好办了
datetime.datetime.strptime
可以将string格式,按照格式化要求"%Y-%m-%d",变成datetime格式。
datetime格式互相之间可以进行加减乘除计算,计算结果单位是天
from datetime import datetime
today_1 = datetime.strptime("2019-07-02", "%Y-%m-%d")
#进行日期与日期之间的减法,计算结果单位是天
date1 = datetime.strptime('2019-06-05', "%Y-%m-%d")
date2 = datetime.strptime('2019-05-30', "%Y-%m-%d")
sub_days = date1 - date2 # 得到天数
不过目前得到的sub_days
是datetime.timedelta()
,不能直接拿来进行简单运算,需要转换下:sub_days.days
之后就是int型数据了
2. 有效删除文件或者文件夹
import os, shutil
if os.path.isfile(filepath): #判断该文件是否为文件或者文件夹
os.remove(filepath) #若为文件,则直接删除
print(str(filepath)+" removed!")
elif os.path.isdir(filepath):
shutil.rmtree(filepath,True) #若为文件夹,则删除该文件夹及文件夹内所有文件
print("dir "+str(filepath)+" removed!")
至此,两个技术点完成,最终代码如下:
import os
import shutil
from datetime import datetime
current_day = datetime.strftime(datetime.now(), "%Y-%m-%d")
current_day = datetime.strptime(current_day, "%Y-%m-%d")
root_path = "/home/username/log"
for filename in os.listdir(root_path):
if "_" not in filename:
continue
filename_day = filename.split("_")[0]
filename_day = datetime.strptime(filename_day, "%Y-%m-%d")
print(current_day, filename_day)
if (current_day - filename_day).days > 60:
current_file = os.path.join(root_path, filename)
if os.path.isfile(current_file):
os.remove(current_file)
print("file '{}' remove".format(current_file))
elif os.path.isdir(current_file):
shutil.rmtree(current_file, True)
print("dir '{}' remove".format(current_file))
参考资料
python strftime()和strptime() 日期获取、格式转换和计算
将timedelta转换为天,小时和分钟
Python简单删除目录下文件以及文件夹
廖雪峰:datetime
网友评论