使用python提取csv文档数据,输出到另一个csv文档

文章讲述了如何使用Python编写脚本从多个CSV文件中提取带宽和延时数据,进行单位转换和数据合并,最终将结果写入新CSV文件,以提高工作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


背景:

有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)

运行脚本查看结果,已经获取到我们想要的那两列数据,接下来就是要把这些数据按照测试报告的格式写入到文档就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)

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

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

总结:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值