使用python的正则表达式模块分析日志
import re
#处理文件的正则表达式
BG = re.compile(r'\[BGsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
Snap = re.compile(r'\[Snapsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
# 初始张数为0
BgNo = 0
SnapNo = 0
# 打开日志文件
filename = input('请输入日志文件名称:')
log = open('./%s' %filename)
index = 0
try:
for line in log:
BGFound = BG.findall(line)
if BGFound != None and len(BGFound) != 0:
BgNo += 1
SnapFound = Snap.findall(line)
if SnapFound != None and len(SnapFound) != 0:
SnapNo += 1
finally:
log.close()
imageNo = BgNo + SnapNo
print(f'一共有: {imageNo} 条传图记录')
print(f'一共有背景图: {BgNo} 张')
print(f'一共有扣图: {SnapNo} 张')
更新,增加默认值设定
import re
import os
import time
#旧版本处理文件的正则表达式
#BG = re.compile(r'\[BGsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
#Snap = re.compile(r'\[Snapsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
BgNo = 0
SnapNo = 0
# 打开日志文件
filename = input('请输入日志文件名称\n(不输入则默认为System.log):')
if filename == '':
filename = 'System.log'
# 查询日志的日期
date = input('请输入要查询的日期\n使用长格式如 2018-01-01\n不输入则默认为当天:')
if date == '':
date = time.strftime('%Y-%m-%d', time.localtime(time.time()))
# 查询日志的时间
hour = input('请输入要查询的具体两位数小时\n如00\n不输入则默认为全天:')
if hour == '':
hour = '[0-9]{2}'
log = open('./%s' %filename)
# 匹配日期时间的正则表达式,该表达式可以完整匹配整条数据,便于后续保存
BG = re.compile(r'\s'+ date + '\s' + hour + ':[0-9]{2}:[0-9]{2}\s\[NOTICE\]\([0-9]{3}\)ms\s-\s\[ovfs_smart\]\s\[\./ovfs_smart_main\.cc\]\s\[BackGroundSender:1103\]\s\sMODULE\[ovfs_smart/main\]\sTYPE\[BGsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
Snap = re.compile(r'\s'+ date + '\s' + hour + ':[0-9]{2}:[0-9]{2}\s\[NOTICE\]\([0-9]{3}\)ms\s-\s\[ovfs_smart\]\s\[\./ovfs_smart_main\.cc\]\s\[SnapSender:1174\]\s\sMODULE\[ovfs_smart/main\]\sTYPE\[Snapsender\]\sTIMESTAMP\[[0-9]{11}\]\sSIZE\[[0-9]{4,6}\]$', re.S|re.M)
# 遍历日志
try:
for line in log:
BGFound = BG.findall(line)
if BGFound != None and len(BGFound) != 0:
BgNo += 1
SnapFound = Snap.findall(line)
if SnapFound != None and len(SnapFound) != 0:
#print(SnapFound)
SnapNo += 1
finally:
log.close()
imageNo = BgNo + SnapNo
print(f'一共有: {imageNo} 条传图记录')
print(f'一共有背景图: {BgNo} 张')
print(f'一共有扣图: {SnapNo} 张')
os.system("pause");
在python3.6 下用pyinstaller打包成exe后的执行效果: