赞
踩
有AB两部分测试数据,需要把这两部分的数据各提取出来,写到另一个文档里面,每一部分都有多个csv文档,手动操作不仅效率低且费时,并且有出现错误的概率,所以利用python来编写一个自动提取数据的脚本来提高工作效率。
把AB两部分的csv文档数据提取出来,按照格式(顺序排列)写入到另一个文档里面。
A部分
B部分
以下是AB两部分的csv待处理数据A文件和数据B文件,这里只截取了部分,实际上数据较多
我们要把AB表格里的Bandwidth(带宽)字段和Lantency(延时)数据,按下面表格的形式写进去,RandRead为A表格数据,RandWrite为B表格数据,说实话我自己看着都眼花。。更别说手动一个个填进去。。。那可真是不小的工作量!
思路:先提取A数据,再提取B数据,然后AB数据交叉相加,再把数据类型转换输出,得到的两列数据即为Q1+Q32
根据AB两个表格,我们只需要第五列和六列的数据,所以在遍历读取每一行的时候,把这两列的数据拿出来就可以了!这里有单位需要换算,我们需要先把数据类型转换成int,再做乘除法。
#!/usr/bin/env python ''' *- coding: utf-8 -*- @Project :PythonProject @File : test_Demo1.py @Author : fushengshuo @Date : 2023/3/2 11:19 @Module : @Description : ''' import csv from itertools import chain # A数据文件地址 ran_read_datapath = "E:\\Desktop\\zlf\\sda\\A\\sda_dataA.csv" # B数据文件地址 ran_write_datapath = "E:\\Desktop\\zlf\\sda\B\\sda_dateB.csv" # 填写 '1job' or '4job' Jobs = '1job' # 提取数据输出的文件路径 Output_datapath = "E:\\Desktop\\zlf\\sda\\output\\sum_AB.csv" # 打开A数据文件 with open(ran_read_datapath, mode="rt", encoding="utf-8-sig") as RdFile: Q1_1, Q32_1 = [[] for x in range(2)] Q1_2, Q32_2 = [[] for x in range(2)] Reader = csv.reader(RdFile) # 逐行获取数据 for row in Reader: if Jobs in row: if '1QD' in row: row_Rt1Q = int(row[5]) * 0.001024 Q1_1.append(row_Rt1Q) Q1_2.append(row[6]) elif '32QD' in row: row_Rt32Q = int(row[5]) * 0.001024 Q32_1.append(row_Rt32Q) Q32_2.append(row[6]) Rd_Bandwidth = Q1_1 + Q32_1 Rd_Lantency = Q1_2 + Q32_2 print("提取的A数据:\n",Rd_Bandwidth,Rd_Lantency) header_list = ["带宽", "延时"] # 打开B数据文件 with open(ran_write_datapath, mode="rt", encoding="utf-8-sig") as WrFile: Q1_3, Q32_3 = [[] for x in range(2)] Q1_4, Q32_4 = [[] for x in range(2)] Reader = csv.reader(WrFile) for row in Reader: if Jobs in row: if '1QD' in row: row_Wt1Q = int(row[5]) * 0.001024 Q1_3.append(row_Wt1Q) Q1_4.append(row[6]) elif '32QD' in row: row_Wt32Q = int(row[5]) * 0.001024 Q32_3.append(row_Wt32Q) Q32_4.append(row[6]) Wr_Bandwidth = Q1_3 + Q32_3 Wr_Lantency = Q1_4 + Q32_4 print("提取的B数据为:\n",Wr_Bandwidth,Wr_Lantency)
运行脚本查看结果,已经获取到我们想要的那两列数据,接下来就是要把这些数据按照测试报告的格式写入到文档就OK了。
经过上面的脚本处理,获取到的AB数据总共由四个列表组成,为abcd,我们要把这四个列表进行交叉相加,组成两个新的列表,即为A=a+c;B=b+d。
Bandwidth_list = list(chain.from_iterable(zip(Rd_Bandwidth, Wr_Bandwidth)))
Lantency_list = list(chain.from_iterable(zip(Rd_Lantency, Wr_Lantency)))
rows = zip(Bandwidth_list, Lantency_list)
# 打开文件并写入
with open(Output_datapath, mode="wt", encoding="utf-8-sig", newline="") as DataFile:
Write = csv.writer(DataFile)
Write.writerow(header_list)
for row in rows:
Write.writerow(row)
print("数据已提取到目录:", Output_datapath)
这里用到**chain.from_iterable()**迭代器对两个列表组合成一个列表,即为Bandwidth_list和Lantency_list,这时我们的数据还需要再转换为元组类型,否则写入就会以行的形式写入,达不到我们想要的效果!元组类型使用zip函数,zips=zip(list1,list2)形式。
运行脚本查看结果:
可以看到,已经自动生成我们命名的csv文档,打开查看数据和测试报告的数据一一对应,直接复制粘贴就可以啦!!!
脚本总体上来看还可以再优化,比如一次性提取文件夹下面所有的csv文档数据,那样就更方便,不过做到这一步我就很开心啦,毕竟目前我只是个编程小白,该脚本编写总共花了4-5个小时,难度不是很大,难的是思路,你要怎么提取数据以及后续的处理等等。
这是本人第一次在博客发表文章,后续如果有时间会把个人成长记录到博客里面,希望我的内容对你有所帮助,如果你有好的建议或者觉得作者有需要改进的地方,欢迎向我反馈,还请各位大佬多多指教!/抱拳
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。