系列文章:
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 reimport oslog_path = './log/XXX/XXXX.txt'start_char = "SR2 ="end_char = "uS"title = 'XXXXXXXXX'log_to_pic(log_path,start_char,end_char,title)
四、问题及其改进
有时候数据为字符类型,我们需要转成int类型,否则做的图会有问题
# 安全地将每个元素转换为intint_list = []for item in current_chunk:try:int_list.append(int(float(item))) # 首先尝试将字符串转换为浮点数,然后转换为整数except ValueError:print(f"无法转换: {item}")