python习题:清理三天前的日志

#1、写清理日志脚本,要求转入一个路径,只保留3天以内的日志,剩下的全删掉。
#今天是 20180114
# 20180115 20180114 20180113
 
#需求分析:
'''1、第一种思路:可以选择把要留下的日期放在一个list里,然后不在这个list里的可以删除(本次代码用的是这个思路)
2、第二种思路:算出三天前的时间戳,如果大于三天前的日期就保留,反之删除(性能好)
'''
 第一种,只用time,不用datetime
import time,os,datetime
def timeStampToFormatTime(timeint_sec,format='%Y-%m-%d'):
'''这是把时间戳转换成格式化的时间,传入的参数是int型的秒,和转换后的时间格式
例如,传入1516258636,转换成:'%Y-%m-%d'格式的 2018-01-18,当然格式后面也可以加上时分秒%Y-%m-%d %H:%M:%S'''
cur_time = time.localtime(timeint_sec) #时间戳转成时间元组
format_time = time.strftime(format, cur_time)#再把时间元组转成格式化好的时间
return format_time
def formatTimeToTimeStamp(timestr_sec,format='%Y-%m-%d'):
# 传入'2018-01-18' 转换成 1516258636
# 这个函数是格式化好的时间,转时间戳的
time_tup = time.strptime(timestr_sec, format) # 把格式化好的时间转成时间元组
timestamp = int(time.mktime(time_tup) ) # 时间元组转成时间戳
return timestamp
def del_logs(path):
if os.path.exists(path) and os.path.isdir(path):
today = time.strftime('%Y-%m-%d') # 当前日期
cur_timestamp =formatTimeToTimeStamp(today,'%Y-%m-%d') #当前时间戳
yesterday = cur_timestamp - 86400
before_yesterday = yesterday - 86400
file_name_list = [today,timeStampToFormatTime(yesterday,format='%Y-%m-%d'),timeStampToFormatTime(before_yesterday,format='%Y-%m-%d')]#这里面放的是要保留文件的日期
for file in os.listdir(path): #os.listdir(path) 文件夹下所有文件名字,存在list里
file_name_sp = file.split('.')# 日志名字按.分割,分割成['catalina', '2017-06-13', 'log']
if len(file_name_sp)>2 :# 日志名字中有不带日期的,需要过滤掉,过滤掉['catalina','out']['c_']这两个文件
file_date = file_name_sp[1]
if file_date not in file_name_list:
abs_path = os.path.join(path,file)
print('已删除:%s'%abs_path)
os.remove(abs_path)
else:
print('没有可删除的文件')
else:
print('路径不存在或者不是一个目录')
def star():
logs_path = input('请输入日志地址:')
if os.path.exists(logs_path):
del_logs(logs_path)
else:
print('日志地址不存在!')
star()

第2种,引入datetime
import time,datetime,os
def del_logs(path):
if os.path.exists(path) and os.path.isdir(path):
today = datetime.date.today()# 当前日期
yesterday = datetime.date.today() - datetime.timedelta(days=1)
before_yesterday = datetime.date.today() - datetime.timedelta(days=2)
file_name_list = [str(today),str(yesterday),str(before_yesterday)]#这里面放的是要保留文件的日期,需要转成字符串格式,否则list里存的格式是<class 'datetime.date'>
for file in os.listdir(path): #os.listdir(path) 文件夹下所有文件名字,存在list里
file_name_sp = file.split('.')# 日志名字按.分割,分割成['catalina', '2017-06-13', 'log']
if len(file_name_sp)>2 :# 日志名字中有不带日期的,需要过滤掉,过滤掉['catalina','out']['c_']这两个文件
file_date = file_name_sp[1]
if file_date not in file_name_list:
abs_path = os.path.join(path,file)
print('已删除:%s'%abs_path)
os.remove(abs_path)
else:
print('没有可删除的文件')
else:
print('路径不存在或者不是一个目录')
def star():
logs_path = input('请输入日志地址:')
if os.path.exists(logs_path):
del_logs(logs_path)
else:
print('日志地址不存在!')
star()

posted on 2018-01-24 18:57  爱睡觉的加菲猫  阅读(450)  评论(0编辑  收藏  举报

导航