需求:提取两个数据,第一列不动,将需要的列相加得到新的列数据,将两列数据保存在新的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文件: