系列文章:
0、基本常用功能及其操作
1,20G文件,分类,放入不同文件,每个单独处理
2,数据的归类并处理
3,txt文件指定的数据处理并可视化作图
4,上万行log数据提取并作图进阶版(本文)
5、上万行数据提取并分类进阶版
6、.......... (待定)
一,需求
作测试时,我们经常需要对大量数据进行提取并可视化,也就是作图
上万行的数据,我们不方便提取到excel,复制时还会卡,一不小心,所以呢自动化作图就非常方便。
类似下面这种的数据,格式可能不尽相同,但是基本上每一行的格式一样,我们需要提取时间并作图,查看随着次数的增加的变化率。
二、思路及其实现
1、文件操作,文件的读取并每行提取
2、特定字符的提取,指定的时间,电压,电流,或者次数等等等等
3、作散点图,标题,坐标轴等等信息
上述操作不了解的同学呢,可以去系列文章0_基本操作,去参考查阅学习。
三、代码
作为进阶版,我把函数封装了一下,可以更方便操作
def log_to_pic(log_path,start_char,end_char,title):
# 定义计数器以跟踪当前处理的行数
counter = 0
# 定义一个临时列表存储当前正在处理的值组
current_chunk = []
# #LOG_TO_PIC
# 适用于每一行都有的情况下,每行格式都一样,数据量非常大的那种
with open(log_path, 'r') as file:
for line in file:
# 查找 "&]=&" 和 "&mS" 之间的字符串
start_index = line.find(start_char)
end_index = line.find(end_char, start_index)
# 如果每行都有的情况下,
if start_index != -1 and end_index != -1:
# 提取字符串并去掉空格
time_data = line[start_index + len(start_char):end_index].strip()
# 尝试将字符串转换为浮点数
try:
current_chunk.append(time_data)
except ValueError:
# 当转换失败时,忽略这个数据
continue
# 散点图数据为每组的最大值、最小值和平均值
plt.scatter(range(len(current_chunk)), current_chunk, color='red', marker='o')
# 设置图表的标题和图例
plt.title(title)
plt.xlabel('CYCLE')
plt.ylabel('TIME(US)')
# plt.legend()
# 显示图表
plt.show()
下面是主函数
这里用到的数据的提取是字符串的识别,因为在两个中间,同时,可以应对不同的文件,可自行修改。方便快捷
if __name__ == '__main__':
import re
import os
log_path = './log/XXX/XXXX.txt'
start_char = "SR2 ="
end_char = "uS"
title = 'XXXXXXXXX'
log_to_pic(log_path,start_char,end_char,title)
四、问题及其改进
有时候数据为字符类型,我们需要转成int类型,否则做的图会有问题
# 安全地将每个元素转换为int
int_list = []
for item in current_chunk:
try:
int_list.append(int(float(item))) # 首先尝试将字符串转换为浮点数,然后转换为整数
except ValueError:
print(f"无法转换: {item}")