赞
踩
近几年呢,随着人工智能的兴起,Python使用的越来越多,基本上被誉为万能,都能干点。
而本系列则是专门做数据处理的。
若想了解图像处理相关内容,Python-jupyternotebook-图像基本处理
假设现在 XX.txt 文件中有很多的(杂乱无章的)数据,数据格式如下。
而我们的需求则是,根据不同的dut,代表不同的硬件。
而我们需要分别提取出TPP,然后进行数据处理。
这个还得看文件大小,分别有两种方式,但是,大文件(10G,20G的这种)读取的方式,小文件也可以,所以只用一种也行。
因为我这边有16个DUT,所以得创建16个列表,和文件。大家可自行创建
保存log的时候,可以根据自己保存的log形式自行选择识别算法,一般有两种
1)正则表达式,这时候log的数据形式,需要提取的数据前后需要独特,否则数据会重复
2)空格表示:数据与数据间用空格隔开,Python识别的时候,会自动把空格作为间隔,可以直接找到对应的数据类似数组(0开始),找到对应的存入列表揪行。
设计到txt文件,大家可以去学习一下文件操作,打开关闭啊,只读,可读可写,基本上C语言有,所以大家应该都差不多。
- def read_dut(file_path,base_addr):
- # 用正则表达式匹配dut=后面的值
- dut_regex = re.compile(r'dut=(\d+)')
- # 分别用于保存不同dut数据的列表
- dut1_data = []
- dut2_data = []
- dut3_data = []
- dut4_data = []
- dut5_data = []
- dut6_data = []
- dut7_data = []
- dut8_data = []
- dut9_data = []
- dut10_data = []
- dut11_data = []
- dut12_data = []
- dut13_data = []
- dut14_data = []
- dut15_data = []
- dut16_data = []
-
- # 读取txt文件
- with open(file_path, 'r') as f:
- for line in f:
- # 匹配dut值
- match = dut_regex.search(line)
- if match:
- dut = int(match.group(1))
- else:
- continue
- # 根据dut值将数据放入相应的列表
- if dut == 1:
- dut1_data.append(line)
- elif dut == 2:
- dut2_data.append(line)
- elif dut == 3:
- dut3_data.append(line)
- elif dut == 4:
- dut4_data.append(line)
- elif dut == 5:
- dut5_data.append(line)
- elif dut == 6:
- dut6_data.append(line)
- elif dut == 7:
- dut7_data.append(line)
- elif dut == 8:
- dut8_data.append(line)
- elif dut == 9:
- dut9_data.append(line)
- elif dut == 10:
- dut10_data.append(line)
- elif dut == 11:
- dut11_data.append(line)
- elif dut == 12:
- dut12_data.append(line)
- elif dut == 13:
- dut13_data.append(line)
- elif dut == 14:
- dut14_data.append(line)
- elif dut == 15:
- dut15_data.append(line)
- elif dut == 16:
- dut16_data.append(line)
-
- # 分别保存不同dut数据的txt文件
- with open(base_addr+'dut1_data.txt', 'w') as f:
- f.writelines(dut1_data)
- with open(base_addr+'dut2_data.txt', 'w') as f:
- f.writelines(dut2_data)
- with open(base_addr+'dut3_data.txt', 'w') as f:
- f.writelines(dut3_data)
- with open(base_addr+'dut4_data.txt', 'w') as f:
- f.writelines(dut4_data)
- with open(base_addr+'dut5_data.txt', 'w') as f:
- f.writelines(dut5_data)
- # 分别保存不同dut数据的txt文件
- with open(base_addr+'dut6_data.txt', 'w') as f:
- f.writelines(dut6_data)
- with open(base_addr+'dut7_data.txt', 'w') as f:
- f.writelines(dut7_data)
- with open(base_addr+'dut8_data.txt', 'w') as f:
- f.writelines(dut8_data)
- with open(base_addr+'dut9_data.txt', 'w') as f:
- f.writelines(dut9_data)
- with open(base_addr+'dut10_data.txt', 'w') as f:
- f.writelines(dut10_data)
- # 分别保存不同dut数据的txt文件
- with open(base_addr+'dut11_data.txt', 'w') as f:
- f.writelines(dut11_data)
- with open(base_addr+'dut12_data.txt', 'w') as f:
- f.writelines(dut12_data)
- with open(base_addr+'dut13_data.txt', 'w') as f:
- f.writelines(dut13_data)
- with open(base_addr+'dut14_data.txt', 'w') as f:
- f.writelines(dut14_data)
- with open(base_addr+'dut15_data.txt', 'w') as f:
- f.writelines(dut15_data)
- with open(base_addr+'dut16_data.txt', 'w') as f:
- f.writelines(dut16_data)
- print('dut提取完成')
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
这一步的数据便是如下图所示:
上一步我们把不同DUT数据都提取出来了,接下来就可以分别进行数据提取和处理了
获取TPP后面的值,这个算法也和上面一样两种方法。正则表达式或者空格隔离法。
1,因为每一步单个步骤都用函数封装起来了,所以数据传递是直接写出到txt文件,
2,但是可以直接用列表传递,在函数括号里面加个参数就行。
- def get_tpp(base_addr):
- # 定义正则表达式,用于匹配TPP=和uS之间的内容
- tpp_regex1 = re.compile(r'TPP=(.*?)uS')
- # 循环读取每个dut数据文件,提取TPP和uS之间的内容,并保存为txt文件
- for i in range(1, 17):
- # 构造文件名
- file_name = base_addr + f'dut{i}.txt'
- out_file_name = base_addr + f'tpp{i}.txt'
- if i == 16:
- print("TPP提取完成")
- # 打开文件和输出文件
- with open(file_name, 'r') as f, open(out_file_name, 'w') as out_f:
- for line in f:
- # 使用正则表达式匹配TPP和uS之间的内容
- match = tpp_regex1.search(line)
- if match:
- tpp_value = match.group(1)
- # 将提取的内容写入输出文件
- out_f.write(f'{tpp_value}\n')
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
提取到的数据如下图所示:
接下来就是把数据可视化,数据几个一组,求最值啊,平均值啊,或者其他其他
我这里是求最大、小值和平均值,16个一组。
这里也是从tpp.txt文件中提取数据(由于16个DUT的存在,所以我加了个循环,不然得一个一个改文件名,非常的繁琐)
然后还有作图:这个也非常简单,标题,XYZ轴和刻度。分别有函数。
可参考:Python-图强处理实践
- def tpp16_pic(base_addr,pic_path):
- for i in range(1, 17):
- file_name = base_addr + "tpp" + str(i) + ".txt"
- pic_name = base_addr + pic_path + 'tpp-' + str(i) + ".png"
- tu_title = "dut" + str(i)
- data = []
- with open(file_name, 'r') as f:
- for line in f:
- data.append(float(line.strip()))
- if len(data) == 0:
- print(tu_title+'没有数据')
- else:
- # 将数据分成 256 个为一组
- data = np.array(data, dtype=np.float32)
- data_groups = np.split(data, range(16, len(data), 16))
- # 计算每组的最大、最小、平均值
- max_values = np.array([np.max(group) for group in data_groups])
- min_values = np.array([np.min(group) for group in data_groups])
- mean_values = np.array([np.mean(group) for group in data_groups])
-
- plt.scatter(range(len(max_values)), max_values, s=0.5, c="r", label="Max Values")
- plt.scatter(range(len(min_values)), min_values, s=0.5, c="g", label="Min Values")
- plt.scatter(range(len(mean_values)), mean_values, s=0.5, c="b", label="Mean Values")
- plt.ylim(min(data) - 1, max(data) + 1)
- plt.xlabel("cycle Groups (16 Data Points per Group)")
- plt.ylabel("TPP Values(uS)")
- plt.title(tu_title)
- plt.savefig(pic_name) # 保存为png图片
- plt.close() # 关闭当前绘图窗口
- print("Tpp-散点图绘制完成!")
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
其他的数据也是同理,在这里推荐一个好用的东西GPT,Python的代码基本上大多都可以自动生成,
但是有一个问题就是,你得明确你的需求。
同时你得会会Python的基础,比如语法啊,基本数据结构啊,像列表,字典等等等等。
因为GPT给出的都需要一定量的修改,同时也可以更好的提出需求。
而这个有两种,一是GPT,二是百度的文心一言
1,这个是GPT,edge浏览器里面的插件,新标签页,还有其他插件,大家自行探索。
2,文心一言,这个得去百度申请(时间可能有点慢,我当初申请后四个月才收到回复,现在可能要不了那么久),免费的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。