#encoding=gbk
import os
import re
import math
from os import path '''
手动输入文件nmon文件路径,要截取的开始时间,结束时间
''' rootdir='E:\\pylianxi\\ceshi' #input("请输入文件路径:")
start_time="14:46" #截取的开始时间
end_time="14:56" #截取的结束时间
print(rootdir) def avg(list_a): #求平均值函数
avg_list=0.0
float_item_list=[float(i) for i in list_a]
for i in float_item_list:
if not isinstance(i,(int,float)):
print("列表中含有非数字!!")
return None if len(float_item_list)>0:
avg_list=sum(float_item_list)/len(float_item_list)
#return round(avg_list,3)
return ('%.2f'%avg_list)
else:
return None write_count=0 #记录是否是第一次生成要输出的文件aa.txt
file_names=os.listdir(rootdir) for i in file_names:
file_path=path.join(rootdir,i)
if path.isfile(file_path) and ".nmon" in i:
print(file_path)
#file_record=re.findall(r"\w+",i)[0]+re.findall(r"\d+",i)[0]
file_record=i[:6] #+i[4:6]
#file_record=re.search(r"(\w+)-(\d+)",i).group(1)+re.search(r"(\w+)-(\d+)",i).group(2)
print(file_record)
#with open(file_path,'r',encoding='gbk') as fp:
with open(file_path,'r',encoding='utf-8') as fp:
data_all=fp.readlines()
data_times={}
for j in range(len(data_all)):
if re.search(r"ZZZZ,T",data_all[j]):
#data_times.append(data_all[j].split(',')[2])
data_times[j]=data_all[j].split(',')[2]
#print(data_times)
start_row=0
end_row=max(data_times.keys()) for k,v in data_times.items():
if start_time in v:
start_row=k
print("循环中的start_row:",start_row)
break for k,v in data_times.items():
if end_time in v:
end_row=k
print("循环中的end_row:",end_row)
break print("校验前的start_row:",start_row)
if start_row==0:
print("未找到开始时间,从文件头开始") print("校验前的end_row:",end_row)
if end_row==max(data_times.keys()):
print("未找到结束时间,计算至文件结尾") performance_cpu=[]
performance_mem=[]
performance_disk_single=[]
performance_disk=[]
for n in data_all[start_row:end_row]:
if re.search(r"CPU_ALL,T.*",n):
#print(n.split(",")[5])
performance_cpu.append(100-float(n.split(",")[5]))
if re.search(r"MEM,T.*",n):
performance_mem.append((float(n.split(",")[2])-float(n.split(",")[6])-float(n.split(",")[11]))*100/float(n.split(",")[2]))
if re.search(r"DISKXFER,T.*",n):
performance_disk_single=n.split(",")[2:]
sum_disk=0.0
for nn in performance_disk_single:
sum_disk+=float(nn)
performance_disk.append(sum_disk)
#print(performance_cpu)
#print(performance_mem)
#print(performance_disk)
cpu_avg=avg(performance_cpu)
mem_avg=avg(performance_mem)
disk_avg=avg(performance_disk)
output_filename='aa.txt'
output_path=path.join(rootdir,output_filename) if write_count==0:
fp1=open(output_path,'w',encoding='gbk')
fp1.write("")
write_count+=1
fp1.close() with open(output_path,'a+',encoding='gbk') as fp2:
fp2.write(file_record+','+str(cpu_avg)+','+str(mem_avg)+','+str(disk_avg)+'\n')

nomn文件分析的更多相关文章

  1. linux实践之ELF文件分析

    linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf ...

  2. 蓝屏 Dump文件分析方法

    WinDbg使用有点麻烦,还要符号表什么的.试了下,感觉显示很乱,分析的也不够全面... 试试其他的吧!今天电脑蓝屏了,就使用其dump文件测试,如下: 1.首先,最详细的,要属Osr Online这 ...

  3. KEIL MDK输出map文件分析

    一.文件分析流程 1.第一部分:Section Cross References 主要是各个源文件生成的模块之间相互引用的关系. stm32f10x.o(STACK) refers (Special) ...

  4. ecshop init.php文件分析

    1.  ecshop init.php文件分析 2.  <?php  3.   4.  /**  5.  * ECSHOP 前台公用文件  6.  * ===================== ...

  5. [转载]mysql慢日志文件分析处理

    原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...

  6. 使用 Eclipse Memory Analyzer 进行堆转储文件分析

    Eclipse Memory Analyzer(MAT)是著名的跨平台集成开发环境 Eclipse Galileo 版本的 33 个组成项目中之一,它是一个功能丰富的 JAVA 堆转储文件分析工具,可 ...

  7. Android JNI入门第三篇——jni头文件分析

    一. 首先写了java文件: public class HeaderFile { private native void  doVoid(); native int doShort(); native ...

  8. Java class文件分析工具 -- Classpy

    Classpy Classpy是一个图形化的class文件分析工具,功能和javap类似,界面主要參考了Java Class Viewer: 为什么要又一次创造轮子? 写这个工具花了将近一周的时间.那 ...

  9. STM32固件库文件分析

    STM32固件库文件分析 1.汇编编写的启动文件 startup/stm32f10x.hd.s:设置堆栈指针,设置pc指针,初始化中断向量,配置系统时钟,对用c库函数_main最后去c语言世界里. 2 ...

随机推荐

  1. jvm minor gc 为什么比 full gc 快很多

    1.minor gc 也需要STW,只不过正常情况下 minor gc  STW时间非常短,所以很多人误以为没有STW. 这里的正常情况是,Eden 区产生的新对象大部分被回收了,不需要拷贝. 2.M ...

  2. 游戏协议模拟测试工具(TcpEngine)使用简介

    功能介绍 在有的网络开发需要走二进制流协议场景,比如网络游戏开发,在开发阶段,前端和后端协商好协议后就分别开发.在开发写代码的时候,有时需要对端发送一条完整的协议过来触发一下自己的代码,进行单步调试或 ...

  3. 《Hadoop》大数据技术开发实战学习笔记(二)

    搭建Hadoop 2.x分布式集群 1.Hadoop集群角色分配 2.上传Hadoop并解压 在centos01中,将安装文件上传到/opt/softwares/目录,然后解压安装文件到/opt/mo ...

  4. 谷歌插件:右键搜使用指南.md

    基本功能看插件,说几个自定义搜索的实现 自定义技巧:%s选择的文字或页面或链接,%g转换成GBK字符集,%t转换成BIG5字符集,%p剪贴板内容,%u当前页面域名. 注:这部分内容来自谷歌插件介绍.使 ...

  5. Homebrew介绍和使用

    一.Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径 ...

  6. selenium + python 环境配置 (二)之启动IE

    安装好python.selenium工具后,下一步就是启动浏览器 1.启动IE浏览器 即Selenium 调用IEDriverServer打开IE浏览器 ,因此需下载对应的IEDriverServer ...

  7. CEC、ARC功能介绍

    众所周知,HDMI作为一个数字化视频音频的接收标准,是可以同时传输视频和音频的,当然随着HDMI版本的提升,它的功能也一直在增强.事实上HDMI升级到1.3时,人们就发现了HDMI多了一个CEC功能. ...

  8. Java线程安全队列Queue实现原理

    原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...

  9. ThreadLocal的坑--ThreadLocal跨线程传递问题

    1.父子线程间的传递问题 ThreadLocal的子类InheritableThreadLocal其实已经帮我们处理好了,通过这个组件可以实现父子线程之间的数据传递,在子线程中能够父线程中的Threa ...

  10. Redis 常用命令学习三:哈希类型命令

    1.赋值与取值命令 127.0.0.1:6379> hset stu name qiao (integer) 1 127.0.0.1:6379> hset stu sex man (int ...