美文网首页
python 删除超过一定期限的log文件

python 删除超过一定期限的log文件

作者: 生活就是爱 | 来源:发表于2020-06-09 10:49 被阅读0次

    现有技术需求:删除超过一定期限(比如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_daysdatetime.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

    相关文章

      网友评论

          本文标题:python 删除超过一定期限的log文件

          本文链接:https://www.haomeiwen.com/subject/cefstktx.html