現(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_days是datetime.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