python 刪除超過一定期限的log文件

現(xiàn)有技術(shù)需求:刪除超過一定期限(比如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

有兩個(gè)技術(shù)點(diǎn):1.如何判斷文件或文件夾超過60天; 2.如何有效刪除文件或者文件夾
下面逐個(gè)擊破

1. 判斷文件或文件夾超過60天:datetime.datetime.strptime

可以看到,目標(biāo)文件和文件夾都是以日期格式進(jìn)行存儲(chǔ)的,這樣就好辦了
datetime.datetime.strptime可以將string格式,按照格式化要求"%Y-%m-%d",變成datetime格式。
datetime格式互相之間可以進(jìn)行加減乘除計(jì)算,計(jì)算結(jié)果單位是天

from datetime import datetime

today_1 = datetime.strptime("2019-07-02", "%Y-%m-%d")

#進(jìn)行日期與日期之間的減法,計(jì)算結(jié)果單位是天
date1 = datetime.strptime('2019-06-05', "%Y-%m-%d")
date2 = datetime.strptime('2019-05-30', "%Y-%m-%d")
sub_days = date1 - date2  # 得到天數(shù)

不過目前得到的sub_daysdatetime.timedelta(),不能直接拿來進(jìn)行簡(jiǎn)單運(yùn)算,需要轉(zhuǎn)換下:sub_days.days之后就是int型數(shù)據(jù)了

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) #若為文件夾,則刪除該文件夾及文件夾內(nèi)所有文件
    print("dir "+str(filepath)+" removed!")

至此,兩個(gè)技術(shù)點(diǎn)完成,最終代碼如下:

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() 日期獲取、格式轉(zhuǎn)換和計(jì)算
將timedelta轉(zhuǎn)換為天,小時(shí)和分鐘
Python簡(jiǎn)單刪除目錄下文件以及文件夾
廖雪峰:datetime

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、 5//2=25/2=2.52、全局變量 global foo3、list.index(xx) 沒有則引發(fā)異...
    SkTj閱讀 372評(píng)論 0 0
  • 1. 函數(shù)的定義與使用 1.1 函數(shù)的定義 1.2 函數(shù)的基本調(diào)用 1.3 函數(shù)的使用技巧(==IMPORTANT...
    c0b2b66e5dc4閱讀 335評(píng)論 0 1
  • 一、目錄遍歷 os 用于獲取系統(tǒng)的功能,主要用于操作文件或者文件夾代碼演示:import ospath = r...
    hollow_02f9閱讀 1,613評(píng)論 0 0
  • 寫在前面的話 代碼中的# > 表示的是輸出結(jié)果 輸入 使用input()函數(shù) 用法 注意input函數(shù)輸出的均是字...
    FlyingLittlePG閱讀 3,223評(píng)論 0 9
  • 下面我們來講一些內(nèi)置的模塊,即不需要下載就可以使用的模塊 一、sys 二、os 1.關(guān)于目錄的一些操作 作用寫法例...
    捏小棋閱讀 514評(píng)論 0 1

友情鏈接更多精彩內(nèi)容