• 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()
  • 相关阅读:
    pycharm优化
    Shell基本命令
    Django项目订单接入支付宝
    浏览器的同源策略及跨域解决方案
    python datetime时区转换
    Django contenttypes 组件
    MySQL使用版本号实现乐观锁
    MySQL DDL Demo
    Redis分布式锁
    Zookeeper分布式锁
  • 原文地址:https://www.cnblogs.com/blackbird0423/p/8343105.html
Copyright © 2020-2023  润新知