使用python的正则表达式模块分析日志

使用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后的执行效果:

执行过程

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 以下是Python代码示例,用于提取日志并将数据放入相应字段中: ```python import re # 打开日志文件 with open('log.txt', 'r') as f: log_data = f.read() # 使用正则表达式获取时间、主机名、日志内容 time_pattern = re.compile(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}') hostname_pattern = re.compile(r'Host: (\w+)') content_pattern = re.compile(r'Content: (.+)') time_list = re.findall(time_pattern, log_data) hostname_list = re.findall(hostname_pattern, log_data) content_list = re.findall(content_pattern, log_data) # 将数据放入相应字段中 result = [] for i in range(len(time_list)): result.append({'time': time_list[i], 'hostname': hostname_list[i], 'content': content_list[i]}) ``` 2. 以下是Python代码示例,用于筛选出命令为vim的日志并将数据保存到Excel表格中: ```python import pandas as pd # 将数据放入DataFrame中 df = pd.DataFrame(result) # 筛选出命令为vim的日志 vim_df = df[df['content'].str.contains('vim')] # 将结果保存到Excel表格中 vim_df.to_excel('vim_logs.xlsx', index=False) ``` 3. 以下是Python代码示例,用于将时间拆分成月份、日期、时间三个字段: ```python # 将时间字段拆分成月份、日期、时间三个字段 vim_df['month'] = pd.to_datetime(vim_df['time']).dt.month vim_df['day'] = pd.to_datetime(vim_df['time']).dt.day vim_df['time'] = pd.to_datetime(vim_df['time']).dt.time ``` 注意:以上示例代码中,使用了Pandas库和Python自带的datetime模块,需要先安装或导入相应库。另外,正则表达式的模式需要根据实际日志格式进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值