https://deerchao.cn/tutorials/regex/regex.htm
这篇文章,大佬写的很好。我这种菜鸟也看得懂哦。
领导写了一个python,去统计日志中的数据。只用了26行==我写了一个100行的java,split切割出有用的数据统计。先把日志文件从现场拷贝回来,然后运行java代码输出统计结果。用python的话,linux操作系统自带的python3命令,运行文件直接输出统计结果。这样我就轻松多了!
python,我第一次看,看不懂,找了一个算法的同事帮我看。她说了逻辑,我自己整理了下。大概意思是,sys.argv获取命令中的参数文件,判断名称长度,未输入文件名就退出.如果操作系统找不到输入的文件的路径,就退出。打开文件,对每一行日志做判断,如果用正则匹配上了,那么获取每一个匹配到的数字累加到数组中对应的变量中。重复这个操作,对每一行匹配,直到结束。输出数组内容。这样就统计完成一个日志文件中,对应的数据信息了!!
源码
import os
import re
import sys
REG_COUNT = '^.*stastic info.*consume]\\s(\\d+).*downsucc]\\s(\\d+).*downfail]\\s(\\d+).*recogsucc]\\s(\\d+).*recogfail]\\s(\\d+).*recogresult]\\s(\\d+).*sendsucc]\\s(\\d+).*sendfail]\\s(\\d+).*$'
COUNT_NAME = ["消费收到的数据", "图片下载成功", "图片下载失败", "识别成功图片", "识别失败图片", "识别结果数量", "推送成功", "推送失败"]
COUNT_VALUE = [0, 0, 0, 0, 0, 0, 0, 0]
if len(sys.argv) < 2:
print('请指定文件名')
sys.exit()
if not os.path.exists(sys.argv[1]):
print('日志文件不存在:', sys.argv[1])
sys.exit()
colLen = len(COUNT_VALUE)
with open(sys.argv[1], 'r', encoding='utf-8') as f:
for line in f:
match = re.match(REG_COUNT, line)
if match:
for i in range(colLen):
COUNT_VALUE[i] += int(match.group(i + 1))
for i in range(colLen):
print(COUNT_NAME[i], ':', COUNT_VALUE[i])
运行成功截图