python统计日志中数据从开始到结束的响应时间的最大值、最小值、平均值、中位数

news2024/11/17 5:42:13

应用场景:需要根据日志文件,统计出数据从开始下发到收到回复所需的时间,包括最大值、最小值、平均值、中位数。
日志格式如图类似,每一行日志开始部分就是所需要截取的时间;1条日记是以某些关键词作为开始,获取改条日志的时间。其后的日志中找到1条对应着结束的日志,并获取时间,两者的差值就是所需要的时间值;如果没有找到结束的那条日志,那么其对应的开始那条记录是需要被舍弃掉,说明该条数据是执行失败,不需要被统计在内。
在这里插入图片描述

import codecs
import statistics
from datetime import datetime

f = codecs.open('test.log', mode='r', encoding='utf-8')  # 打开log文件,以‘utf-8’编码读取
lineStr = f.readline() # 按行读取log文件
data = []  # 时间差值
startList = []  # 定义开始时间列数据存放在列表
endList = []  # 定义结束时间列数据存放在列表
while lineStr:
    if '开始' in lineStr:  # 筛选出每行中包含“开始”的数日志,作为一条数据的开始
        startStr = lineStr[:23]  # 提取开始时间
        # 将字符串解析为datetime对象
        dt = datetime.strptime(startStr, "%Y-%m-%d %H:%M:%S.%f")
        # 将datetime对象转换为毫秒级时间戳
        timestamp_millis = int(dt.timestamp() * 1000)
        # print(timestamp_millis)
        startList.append(timestamp_millis)
    elif '结束' in lineStr:  # 筛选出每行中包含的“结束”的日志,作为一条数据的结束
        endStr = lineStr[:23]
        dt = datetime.strptime(endStr, "%Y-%m-%d %H:%M:%S.%f")
        # 将datetime对象转换为毫秒级时间戳
        timestamp_millis = int(dt.timestamp() * 1000)
        endList.append(timestamp_millis)
    lineStr = f.readline()
f.close()
print("命令下发到驱动执行完成(ms):")
num1 = len(startList)
num2 = len(endList)
if num1 == num2:  # 开始和结束的日志必须要是相邻的,否则开始的那条日志被舍弃
    for i in range(num1):
        d = int(endList[i]) - int(startList[i])
        data.append(d)
else:
    print("开始和结束的数量不匹配!!")
print('使用的测试数据量是:{}条'.format(num1))
# print('开始时间的数据量是:{}条'.format(num1))
# print('结束时间的数据量是:{}条'.format(num2))
# print('计算的时间差值是:{}'.format(data))
# 计算出时间差值中的最大值:
maxStr = max(data)
print('计算差值中的最大值:{}ms'.format(maxStr))

# 计算出时间差值中的最小值:
minStr = min(data)
print('计算差值中的最小值:{}ms'.format(minStr))

# 计算出时间差值中的平均值:
avgStr = statistics.mean(data)
print('计算差值中的平均值:{:.2f}ms'.format(avgStr)) # 保留两位小数

# 计算出时间差值中的中位数:
midStr = statistics.median(data)
print('计算差值中的中位数:{}ms'.format(midStr))

运行的结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1499553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言自定义颜色

一、创建颜色梯度&#xff08;渐变色&#xff09; 在绘热图时&#xff0c;需要将数值映射到不同的颜色上&#xff0c;这时就需要一系列的颜色梯度colorRampPalette 函数支持自定义的创建一系列的颜色梯度。 代码示例&#xff1a; library(RColorBrewer)x <- colorRampPal…

从新能源汽车行业自动驾驶技术去看AI的发展未来趋势

自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以及自动驾驶汽车测试与验证技术等。 &#x1f413; 自动驾驶技术 这是AI在汽车行业中应用最广泛的领域之一。自动驾驶技术利用AI算法和传感器来感知环境、识别障碍物&#xff0c…

购买阿里云服务器如何选择实例?根据业务场景与细分场景推荐实例规格

对于很多初次购买阿里云服务器的用户来说&#xff0c;面对众多可选择的云服务器实例规格&#xff0c;往往不知道如何选择&#xff0c;不同实例规格适用于不同的业务场景&#xff0c;本文为大家汇总了不同业务场景和细分场景下应该选择的主要实例规格&#xff0c;以及这些实例规…

传统应急照明解决方案和新标准下地铁应急照明的方案区别

传统地铁站应急照明系统方案 传统地铁站应急照明系统一般设置2套或4套,给相应端区域的应急照明提供电源。由于地铁站应急照明系统设计比较成熟&#xff0c;几乎所有的地铁站接线方案均采用了经典的双电源切换加蓄电池逆变交流220/380V的配电方式.以南方某地铁站为例,此地铁站是…

YoloV8改进策略:Block改进|自研Block,涨点超猛|代码详解|附结构图

涨点效果 涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.993,mAP50-95由0.737涨到0.757,涨点明显! 参考模型 参考的Block,如下图: 我对Block做了修改,修改后的结构图如下: 代码详解 from timm.models.layers import DropPathfrom torch import Tensor def …

阿里云服务器使用教程_2024建站教程_10分钟网站搭建流程

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

selenium 4.17正式发布,这几项更新值得关注

&#xff08;全文约1400字&#xff0c;阅读约需4分钟&#xff0c;首发于公众号&#xff1a;测试开发研习社&#xff0c;欢迎关注&#xff09; 两天前&#xff0c;selenium 正式发布了新版本 4.17&#xff0c;其中 python 版本的变化有更新更新值得关注 1. CDP 支持范围调整到 &…

117.龙芯2k1000-pmon(16)- linux下升级pmon

pmon的升级总是有些不方便&#xff0c;至少是要借助串口和串口工具 如果现场不方便连接串口&#xff0c;是不是可以使用网线升级pmon呢&#xff1f; 答案当然是可行的。 环境&#xff1a;2k1000linux3.10麒麟的文件系统 如今我已经把这个工具开发出来了。 GitHub - zhaozhi…

做抖店用平板能代替电脑操作吗?抖店运营相关注意事项,注意规避

我是王路飞。 之前给你们讲在抖音开店流程的时候&#xff0c;说过开店需要用到电脑&#xff0c;还需要执照、资金、时间等等。 那么做抖店用平板能代替电脑操作吗&#xff1f; 这个问题其实有很多新手问过我&#xff0c;有的甚至是想直接在手机上操作&#xff0c;想着能省点…

怎么对接迅雷网盘拉新项目?迅雷网盘怎么做才有效果?

自网盘拉新项目上线以来&#xff0c;网盘市场日益繁荣&#xff0c;各大厂商纷纷进军这一领域。头条网盘、悟空网盘、UC网盘、迅雷网盘等都成为了各个推广达人喜欢的推广项目。其中&#xff0c;迅雷网盘凭借其稳定的服务、强大的功能和广泛的用户基础&#xff0c;成为了市场中的…

西门子Mendix低代码资深技术顾问张戟,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;LowCode低码时代、RPA中国、AIGC开放社区&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索低…

【Java EE初阶三十】JVM的简单学习

1. JVM 内存区域划分 一个运行起来的 Java 进程&#xff0c;就是一个 JVM 虚拟机&#xff0c;需要从操作系统申请一大块内存&#xff0c;就会把这个内存&#xff0c;划分成不同的区域&#xff0c;每个区域都有不同的作用. JVM 申请了一大块内存之后,也会划分成不同的内…

【算法刷题】Day30

1. 汉诺塔问题 原题链接 题干&#xff1a; 算法原理&#xff1a; 利用递归算法 将x柱子上的一堆盘子&#xff0c;借助 y柱子&#xff0c;转移到z 柱子上面 递归函数流程&#xff1a; 当前问题规模为 n1 时&#xff0c;直接将 A 中的最上面盘子挪到 C 中并返回递归将 A 中最…

spm用于颅骨去除和配准

1. 颅骨去除 出现这个界面就一直等待即可&#xff1a; segment的结果文件中会出现四个文件夹label、mri、report、surf 在mri文件中&#xff0c;mwp1是分割出来的灰质图像&#xff0c;mwp2是分割出来的白质图像&#xff0c;这两图像均是bias correction和空间配准后的。p0**…

Keepalive 解决nginx 的高可用问题

一 说明 keepalived利用 VRRP Script 技术&#xff0c;可以调用外部的辅助脚本进行资源监控&#xff0c;并根据监控的结果实现优先动态调整&#xff0c;从而实现其它应用的高可用性功能 参考配置文件&#xff1a; /usr/share/doc/keepalived/keepalived.conf.vrrp.localche…

机器学习——分类问题、logistic分类算法

之前我们学习的线性回归算法&#xff0c;适用于预测值y为连续值的情况下&#xff0c;但是在分类问题中&#xff0c;预测值y是个离散值&#xff0c;所以线性回归算法不适用。在这篇文章中&#xff0c;主要以二分类问题为例&#xff0c;介绍分类算法————logistic回归算法&…

Docker容器化解决方案(容器生命周期管理)

容器生命周期管理 1.run 创建一个新的容器并运行一个命令 语法格式docker run [OPTIONS] IMAGE [COMMAND][ARG...] 备注:其实跟docker create一样的语法格式&#xff0c;只不过可以运行容器甚至进入容器内部COMMAND: 需要在容器内执行的命令docker run执行流程首先在指定镜像…

基于单片机的老人防丢系统设计

目 录 摘 要 I Abstract II 引 言 3 1 系统总体架构 6 1.1方案设计与选择 6 1.2 系统架构设计 6 1.3 系统器件选择 7 2 系统硬件设计 9 2.1 单片机外围电路设计 9 2.2 LCD1602液晶显示电路设计 12 2.3 短信模块电路设计 14 2.4 GPS模块电路设计 14 2.5 电源与按键控制电路设计…

创邻科技获评环紫金港创新生态圈智源创新企业

3月1日&#xff0c;由杭州城西科创大走廊管理委员会指导&#xff0c;中共杭州市西湖区委员会、西湖区人民政府主办的“环紫金港创新生态圈”行动推进大会暨2024年紫金港科技城经济高质量发展大会在杭州举办。凭借重要的生态位置和创新业务成果&#xff0c;创邻科技受邀参会并被…

WPF ListBox滚动条一直在最底部

需求&#xff1a;解压文件 显示解压进度 private void AppendProcessText(string content){//注意这两段代码的先后顺序listBox01.Items.Add(content);listBox01.ScrollIntoView(listBox01.Items[listBox01.Items.Count - 1]);}