介绍:
- 使用python编写一个自动压缩日志文件的脚本
相关技术:
1.使用python os.listdir遍历文件,不包含文件夹
2.使用python re正则表达式匹配日志文件
3.使用python tarfile模块压缩文件
注意:
请使用Linux的crontab使用,谢谢!
比如:
每天凌晨5点执行脚本
0 5 * * * /usr/bin/python /opt/script/compressLogs.py(这个是我的脚本路径)
效果图:
请看源代码,如果觉得好,还请给小编点赞下下哦!
#!/usr/bin python
# _*_ coding:utf-8 _*_
# Author: Gavin
# Version: 1.0
# CreateTime: 2018-09-04
# ScriptName: compressLogs
# Description: 压缩日志
# readme: logsPath请赋予相应的值
import os
import datetime
import re
import tarfile
# 获取文件路径集合
def getFile(logsPath):
logsFile = []
fileList = os.listdir(logsPath)
for fileName in fileList:
path = os.path.join(logsPath, fileName)
# 过滤子文件的文件被压缩
if os.path.isdir(path):
continue
logsFile.append(path)
return logsFile
# 检查文件,备份文件
def checkFile(logsFiles):
newDate = datetime.datetime.now().strftime('%Y-%m-%d') # 当前时间
for f in logsFiles:
# 过滤压缩文件检查
if f.endswith(".tar.gz"):
continue
# 使用正则获取日志文件名的时间
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2})", f)
if bool(mat):
delta = datetime.datetime.strptime(newDate, '%Y-%m-%d') - datetime.datetime.strptime(mat.group(), '%Y-%m-%d')
# 当前时间 - 文件时间 :大于0
if delta.days > 0:
# 已经压缩完成的日志文件,删除原日志文件,保留压缩文件
for apath in logsFiles:
if apath.endswith(".tar.gz") and apath.endswith("%s.tar.gz" % mat.group()):
os.remove(apath)
break
# 没有压缩的文件,压缩后,删除原文件
tar = tarfile.open("%s.tar.gz" % f[0: -4], "w:gz")
tar.add(f)
tar.close()
os.remove(f)
if __name__ == "__main__":
# 请修改日志路径,注意路径一定要完整,后面要使用str切割,不要省略路径某位的/
# windows: F://application_logs// linux: /opt/applog/
logsPath = "F://application_logs//"
logsFiles = getFile(logsPath)
checkFile(logsFiles)