#处理文件的正则表达式 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后的执行效果:

使用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\[...
在工作过程中遇到这样一个需求场景,统计查询耗时,由于生产环境没法用来测试,只能从之前的日志信息中获取分析日志文件中输出了大量的日志信息。 解决思路是先找到查询的开始点和结束点,然后计算查询耗时。 用到的模块: re, datetime 注意要使用datetime来计算耗时,datetime要比time强大,可以精确到微秒级别 with open("D...
def regular_expression(self, file, start_value, end_value): text = re.sub('\s+', '', file) pattern = ''+start_value+'(.*?)'+end_value match = re.search(pattern, text) import re logline='''192.168.56.1 - - [18/Mar/2019:10:55:04 +0800] \ "POST /zabbix/jsrpc.php?output=json-rpc HTTP/1.1" 200 64 \ "http://192.168... 文章目录Python学习日志目录前言进入正题Python学习日志13课 - 正则表达式基本符号表Python正则表达式的支持例 题(1).用正则表达式分别验证QQ号和用户名(2).用正则表达式找到所给字符串中所有的数字(3).用正则表达式匹配新闻的标题及链接(4).替换字符串中的不良内容(5).拆分长字符串总结 上次分享了如何使用Python实现办公自动化,基于我们的日常学习工作,它的用处是
服务的链接字符换出错,又没有做日志监控,导致周五、周六、周日的数据更新全部出错,周日的发现了,这个时候错误日志已经达到1.5w条了,当时就崩溃了。。。。 关键是的是,还让其他服务也崩溃了(其他服务也用的这个数据库)。。。因为数据更新不停的尝试更新数据,连接错误数瞬间达到数据库的最大值,数据库不响应了,,,我那个去啊。   迅速改好连接,让服务正常使用。接下来就需要恢复数据了。   把日志拿出
分析Gerrit日志,可以使用Python正则表达式模块日志解析库。 首先,我们需要读取Gerrit服务器的日志文件。可以使用Python内置的`open()`函数来打开日志文件,例如: ```python with open('/var/log/gerrit/error_log') as f: log_data = f.read() 接下来,我们可以使用正则表达式模块来提取有用的信息。例如,假设我们要提取所有提交的ID,可以使用以下代码: ```python import re commit_regex = re.compile(r'commit ([0-9a-f]{40})') commits = commit_regex.findall(log_data) 这将在日志数据中查找所有40个字符长的十六进制字符串,并将其存储在`commits`列表中。 如果我们想要更复杂的分析,例如查找特定日期范围内的提交,我们可能需要使用一个更高级的日志解析库。Python中有很多这样的库,例如`apache-log-parser`和`logstash`等。 使用日志解析库,我们可以轻松地将日志数据转换为Python对象,并在其中执行查询。例如,使用`apache-log-parser`,以下代码将提取所有提交日期在2019年1月1日至1月31日期间的提交: ```python from apache_log_parser import make_parser from datetime import datetime parser = make_parser('%t') commits = [] for line in log_data.splitlines(): parsed_line = parser(line) commit_date = datetime.strptime(parsed_line['time_received_isoformat'], '%Y-%m-%dT%H:%M:%S.%f') if commit_date.year == 2019 and commit_date.month == 1: commits.append(parsed_line['request_url'].split('/')[-1]) 这将使用日志解析器将日志数据转换为Python对象,并将所有在2019年1月份提交的提交ID存储在`commits`列表中。 无论你选择使用哪种方法,分析Gerrit日志都需要小心处理敏感信息,例如用户凭据和其他敏感数据。