项目目标:
1、获取计算机内存占有率和CPU占有率
2、将数据存储到excel表格
3、提取excel数据并绘制折线图
实现方式
1、利用psutil,os,time模块获取数据
#获取当前运行的pid
p1=psutil.Process(os.getpid())
#获取数据
b = psutil.cpu_percent(interval=1.0) # cpu占用率
a = psutil.virtual_memory().percent # 内存占用率
nowtime = time.strftime("%H:%M:%S", time.localtime())
2、利用xlwt模块将数据写入excel表格
#创建excel表格和sheet
myxls = xlwt.Workbook()
sheet1 = myxls.add_sheet(u'CPU')
#写入标题
sheet1.write(0, 0, '当前时间')
sheet1.write(0, 1, 'cpu占用率')
sheet1.write(0, 2, '内存占用率')
#写入数据
i=1
for i in range(1,10):
b = psutil.cpu_percent(interval=1.0) # cpu占用率
a = psutil.virtual_memory().percent # 内存占用率
nowtime = time.strftime("%H:%M:%S", time.localtime())
sheet1.write(i,0,nowtime)
print(nowtime)
sheet1.write(i,1,b)
print(b)
sheet1.write(i,2,a)
myxls.save('CPU.xls')
i+=1
3、利用xlrd模块获取excel中数据
# 获取折线图需要绘制的数据信息;
data=xlrd.open_workbook("CPU.xls")
table=data.sheets()[0]
print(table.ncols)
row1data = table.row_values(0)
print(row1data) # ['列1', '列2', '列3', '列4']
x = []
y1 = []
y2 = []
for i in range(1, table.nrows):
print(table.row_values(i))
x.append(table.row_values(i)[0])
y1.append(table.row_values(i)[1])
y2.append(table.row_values(i)[2])
4、利用pyecharts模块绘制折线图
# 实例化Line类为line对象, 并添加x和y对应的点;
line = (
Line()
.add_xaxis(x)
.add_yaxis("Cpu占有率散点图", y1)
.add_yaxis("内存占有率散点图", y2)
# .set_global_opts(title_opts=opts.TitleOpts(title="Cpu占有率散点图"))
)
# 将折线图信息保存到文件中;
line.render("show.html")
所遇问题
打开excel时遇见问题
错误: Python读取文件时出现UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position xx: 解决方案
原因:使用open函数可能会遇见问题
方法1:data= open(‘order.log’,‘r’, encoding=‘UTF-8’)
方法2:改成xlrd打开,data=xlrd.open_workbook(“CPU.xls”)
绘制图像时
错误:ImportError: cannot import name ‘Line’ from ‘pyecharts’
原因:新版本要使用新的格式
改成:from pyecharts.charts import Line
完整代码
import psutil
import os
import xlwt
import xlrd
import time
from pyecharts.charts import Line
#获取当前运行的pid
p1=psutil.Process(os.getpid())
while True:
myxls = xlwt.Workbook()
sheet1 = myxls.add_sheet(u'CPU')
sheet1.write(0, 0, '当前时间')
sheet1.write(0, 1, 'cpu占用率')
sheet1.write(0, 2, '内存占用率')
i=1
for i in range(1,10):
b = psutil.cpu_percent(interval=1.0) # cpu占用率
a = psutil.virtual_memory().percent # 内存占用率
nowtime = time.strftime("%H:%M:%S", time.localtime())
sheet1.write(i,0,nowtime)
print(nowtime)
sheet1.write(i,1,b)
print(b)
sheet1.write(i,2,a)
myxls.save('CPU.xls')
i+=1
# 获取折线图需要绘制的数据信息;
data=xlrd.open_workbook("CPU.xls")
table=data.sheets()[0]
print(table.ncols)
row1data = table.row_values(0)
print(row1data) # ['列1', '列2', '列3', '列4']
x = []
y1 = []
y2 = []
for i in range(1, table.nrows):
print(table.row_values(i))
x.append(table.row_values(i)[0])
y1.append(table.row_values(i)[1])
y2.append(table.row_values(i)[2])
# 实例化Line类为line对象, 并添加x和y对应的点;
line = (
Line()
.add_xaxis(x)
.add_yaxis("Cpu占有率散点图", y1)
.add_yaxis("内存占有率散点图", y2)
# .set_global_opts(title_opts=opts.TitleOpts(title="Cpu占有率散点图"))
)
# 将折线图信息保存到文件中;
line.render("show.html")