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

应用场景:需要根据日志文件,统计出数据从开始下发到收到回复所需的时间,包括最大值、最小值、平均值、中位数。
日志格式如图类似,每一行日志开始部分就是所需要截取的时间;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))

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSD的原理

简介 SSD(Solid State Drive)是一种使用闪存存储芯片(NAND Flash)的存储设备。与传统的机械硬盘不同,SSD没有移动部件,因此具有更快的读写速度和更低的能耗。 架构 NAND Flash是一种非易失性存储器&…

javase day01笔记

第一天课堂笔记 Java第三代高级语言中的面向对象的语言 b/s 浏览器/服务器c/s 客户端/服务端 1991年詹姆斯高斯林在sun公司开发的Java 常用的dos命令 磁盘操作系统:dos win + r -》 cmd dos命令 切换盘符:直接输入对应盘符目录操作&#x…

6个维度分析实时渲染和Webgl技术异同

在日常交流中,对Webgl技术熟悉的合作伙伴,在初次了解实时渲染技术时,都会问二者之间的异同。目前很多要求B/S架构的项目,很多在用webgl技术路线,而且这个方案在行业里比较普,业主方对这个也比较熟悉&#x…

基于git推送的ES检索pdf内容优化思路与代码实现

写在前面 在之前的内容中我们已经介绍了创建gitbucket的webHook,使得仓库有更新时自动推送到我们定义的接口;然后Java读取仓库的文件转码写入ES库,这些核心流程已经实现。 1. 实现ES检索pdf等文件内容的插件 2. 基于GitBucket的Hook构建ES…

8. 超级终端和 Minicom

超级终端和 Minicom 在对目标板进行查看、操作或目标板和上位机进行文件传输与通信时,需要安装终端软件。通过终端软件来对目标板进行配置,或者执行目标板上的程序与主机进行通信。 下面介绍 3种终端软件,具体开发时,你仅需任意使…

乐优商城(九)数据同步

1. 项目问题分析 现在项目中有三个独立的微服务: 商品微服务:原始数据保存在 MySQL 中,从 MySQL 中增删改查商品数据。搜索微服务:原始数据保存在 ES 的索引库中,从 ES 中查询商品数据。商品详情微服务:做…

2024 年 AI 辅助研发发展与趋势研究

引言 这几年,人工智能(AI)技术火得不行,它渗透到了我们生活的方方面面。从帮助我们识别图片、理解语音,到推荐我们喜欢的内容,甚至自动驾驶汽车,AI都在大显身手。特别是在研发领域,…

代码随想录训练营第41天 | 动态规划:01背包理论基础、动态规划:01背包理论基础(滚动数组)、LeetCode 416.分割等和子集

动态规划:01背包理论基础 文章讲解:代码随想录(programmercarl.com) 视频讲解:带你学透0-1背包问题!_哔哩哔哩_bilibili 动态规划:01背包理论基础(滚动数组) 文章讲解:代码随想录(…

好好好,这样玩是吧。

python聊天机器人 //1.安装方法 pip install requests //2.实例 import requestsdef chat_bot():url http://api.qingyunke.com/api.phpparams {key: free,appid: 0}print("你好!开始对话吧(输入exit退出)")while True:user_in…

Navicat Premium:掌控数据库的强大工具

在当今数字化的时代,数据管理变得越来越重要。无论您是数据库管理员、开发人员还是普通用户,找到一个高效、易用的数据库管理工具是至关重要的。Navicat Premium for Mac/Win 就是这样一款强大的多协议数据库管理工具,它将为您的数据库管理体…

指纹加密U盘/指纹KEY方案——采用金融级安全芯片 ACH512

方案概述 指纹加密U盘解决方案可实现指纹算法处理、数据安全加密、数据高速存取(EMMC/TF卡/NandFlash),可有效保护用户数据安全。 方案特点 • 采用金融级安全芯片 ACH512 • 存储介质:EMMC、TF卡、NandFlash • 支持全系列国密…

docker 使用官方镜像搭建 PHP 环境

一、所需环境: 1、PHP:7.4.33-fpm 的版本 2、Nginx:1.25.1 的版本 3、MySQL: 5.7 的版本 4、Redis:7.0 的版本 1.1、拉取官方的镜像 docker pull php:7.4.33-fpm docker pull nginx:1.25.1 docker pull mysql:5.7 do…

Java编程实战:构建校园二手物品交易系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Toyota Programming Contest 2024#3(AtCoder Beginner Contest 344)(A~C)

A - Spoiler 竖线里面的不要输出&#xff0c;竖线只有一对&#xff0c;且出现一次。 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #define debug(a) cou…

Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程

汇创慧玩 写在前面1. 查看系统架构相关指令2. ARM64交叉编译器环境搭建3. Qt编译arm64环境搭建4. 配置 Qt的本地aarch64交叉编译器5. 工程建立及编译验证 写在前面 苦辣酸甜时光八载&#xff0c;春夏秋冬志此一生 Qt简介&#xff1a; Qt&#xff08;官方发音 [kju:t]&#xff…

配置oh-my-posh

在windows上的powershell上配置oh-my-posh&#xff0c;使其更像在linux用oh-my-zsh。 首先打开powershell&#xff0c;输入&#xff1a; winget install JanDeDobbeleer.OhMyPosh -s winget安装on-my-posh.exe和oh-my-posh上最新的主题。 之后重启powershell。 打开配置文件…

flink重温笔记(十三): flink 高级特性和新特性(2)——ProcessFunction API 和 双流 join

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 13 天啦&#xff01;学习了 flink 高级特性和新特性之ProcessFunction API 和 双流 join&#xff0c;主要是解决大数据领域数据从数据增量聚合的问题&#xff0c;以及快速变化中的流数据拉宽问题&#xff0c;即变化中多个…

【简写Mybatis】03-Mapper xml的注册和使用

前言 在学习MyBatis源码文章中&#xff0c;斗胆想将其讲明白&#xff1b;故有此文章&#xff0c;如有问题&#xff0c;不吝指教&#xff01; 注意&#xff1a; 学习源码一定一定不要太关注代码的编写&#xff0c;而是注意代码实现思想&#xff1b; 通过设问方式来体现代码中的…

vSphere 8考试认证题库 2024最新(VCP 8.0版本)

VMware VCP-DCV&#xff08;2V0-21.23&#xff09;认证考试题库&#xff0c;已全部更新&#xff0c;答案已经完成校对&#xff0c;完整题库请扫描上方二维码访问。正常考可以考到450分以上&#xff08;满分500分&#xff0c;300分通过&#xff09; An administrator is tasked …

HPE ProLiant MicroServer Gen8驱动程序下载(windows)

记录下&#xff0c;以方便需要重装系统时将驱动更新到最后版本。 共有下面设备有适用的驱动可用&#xff1a; 1、系统管理&#xff1a; iLO 4 Channel Interface Driver for Windows Server 2016 下面这个驱动&#xff0c;安装后不知道有什么用 iLO 3/4 Management Control…