当前位置:   article > 正文

使用python提取csv文档数据,输出到另一个csv文档_将不同的csv收集数据

将不同的csv收集数据

背景:

有AB两部分测试数据,需要把这两部分的数据各提取出来,写到另一个文档里面,每一部分都有多个csv文档,手动操作不仅效率低且费时,并且有出现错误的概率,所以利用python来编写一个自动提取数据的脚本来提高工作效率。

目的:

把AB两部分的csv文档数据提取出来,按照格式(顺序排列)写入到另一个文档里面。

A部分
在这里插入图片描述
B部分
在这里插入图片描述
以下是AB两部分的csv待处理数据A文件和数据B文件,这里只截取了部分,实际上数据较多

在这里插入图片描述

在这里插入图片描述

我们要把AB表格里的Bandwidth(带宽)字段和Lantency(延时)数据,按下面表格的形式写进去,RandRead为A表格数据,RandWrite为B表格数据,说实话我自己看着都眼花。。更别说手动一个个填进去。。。那可真是不小的工作量!

在这里插入图片描述
思路:先提取A数据,再提取B数据,然后AB数据交叉相加,再把数据类型转换输出,得到的两列数据即为Q1+Q32

1、提取数据A和数据B代码

根据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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

运行脚本查看结果,已经获取到我们想要的那两列数据,接下来就是要把这些数据按照测试报告的格式写入到文档就OK了。

在这里插入图片描述

2、将数据A和数据B交叉相加,以列的形式写入文档

经过上面的脚本处理,获取到的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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这里用到**chain.from_iterable()**迭代器对两个列表组合成一个列表,即为Bandwidth_list和Lantency_list,这时我们的数据还需要再转换为元组类型,否则写入就会以行的形式写入,达不到我们想要的效果!元组类型使用zip函数,zips=zip(list1,list2)形式。

运行脚本查看结果:
在这里插入图片描述
可以看到,已经自动生成我们命名的csv文档,打开查看数据和测试报告的数据一一对应,直接复制粘贴就可以啦!!!
在这里插入图片描述
在这里插入图片描述

总结:

脚本总体上来看还可以再优化,比如一次性提取文件夹下面所有的csv文档数据,那样就更方便,不过做到这一步我就很开心啦,毕竟目前我只是个编程小白,该脚本编写总共花了4-5个小时,难度不是很大,难的是思路,你要怎么提取数据以及后续的处理等等。

这是本人第一次在博客发表文章,后续如果有时间会把个人成长记录到博客里面,希望我的内容对你有所帮助,如果你有好的建议或者觉得作者有需要改进的地方,欢迎向我反馈,还请各位大佬多多指教!/抱拳

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/940702
推荐阅读
相关标签
  

闽ICP备14008679号