python3 提取csv数据操作一番获取需要的数据

需求:提取两个数据,第一列不动,将需要的列相加得到新的列数据,将两列数据保存在新的csv文件中

decimal模块:https://blog.csdn.net/weixin_40959890/article/details/109641269

上代码:

import csv
from decimal import Decimal
#需要将第几列相加,就把列标写在num_list里面
num_list=[2,4]

def add_clo_data(num_list,data):
    #不可以用float将字符串转换成浮点数,结果会和原来的数有所不准确
    #这是由于原生的二进制浮点数本身存在误差
    #为了消除这种误差,可以用 decimal 模块进行更加精确的浮点计算
    sum=Decimal(0.00000)
    for i,n in enumerate(data):
        #匹配需要相加的列标并将数据相加
        if i in num_list:
            sum=sum+Decimal(n).quantize(Decimal('0.00000'))
    return sum
#创建两个空列表保存数据
list1 = []
list2 = []
with open('sample.csv', 'r') as f1:
    # 读取csv文件
    reader = csv.reader(f1)
    for row in reader:
        #按行读进来的数据一行是一个字符串
        data = row[0].split()
        #切分字符串为单列字符串
        #如果下面float转换字符串为浮点数有误依然需要用decimal模块!!!!
        list1.append(float(data[0]))
        #好像没有出问题
        sum=add_clo_data(num_list,data)
        #调用上面函数获得多列相加的结果并加入list2
        list2.append(sum)
    #创建保存文件对象
    #newline参数为空可以避免空行问题
    with open('data.csv','w',encoding='utf-8',newline='' "") as f2:
        #基于文件对象构建csv写入对象
        csv_writer = csv.writer(f2)
        #写入csv文件内容
        for i,j in zip(list1,list2):
            #创建新的行,准备数据往csv文件里写
            row = []
            row.append(i)
            row.append(j)
            #按行写数据(这里的几步操作其实就是将行数据转行换成了列数据)
            csv_writer.writerow(row)





运行后得到csv文件:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值