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

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

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

python3 提取csv数据操作一番获取需要的数据_第1张图片

上代码:

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文件:

python3 提取csv数据操作一番获取需要的数据_第2张图片

 

你可能感兴趣的:(Python)