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

2020-06-09  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读