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

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

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、 5//2=25/2=2.52、全局变量 global foo3、list.index(xx) 没有则引发异...
    SkTj阅读 388评论 0赞 0
  • 1. 函数的定义与使用 1.1 函数的定义 1.2 函数的基本调用 1.3 函数的使用技巧(==IMPORTANT...
    c0b2b66e5dc4阅读 361评论 0赞 1
  • 一、目录遍历 os 用于获取系统的功能,主要用于操作文件或者文件夹代码演示:import ospath = r...
    hollow_02f9阅读 1,637评论 0赞 0
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 3,330评论 0赞 9
  • 下面我们来讲一些内置的模块,即不需要下载就可以使用的模块 一、sys 二、os 1.关于目录的一些操作 作用写法例...
    捏小棋阅读 533评论 0赞 1

友情链接更多精彩内容