Python多文件读写示例一

因手头上测试机器人的一些精度数据,数据量太大(几千行数据),需要对数据进行分类及处理,如果是在表格中操作,那么会花费太多的时间,为了方便操作CSV表格,特编写以下脚本进行CSV表格操作,不仅快速,而且还好用。

So,现在开始我的代码表演了,虽然代码有点多,而且没进行简化,但是对我这个不是专业码农来说,这些代码对我还是挺有帮助的,各位大佬,不喜勿喷!!!你们看看就好。

读取的CSV文件格式如下:

代码运行结果:

写入的CSV文件:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import csv,math,time
time.sleep(1)
end = "#" #这是我自创的代码块结束语,我还是喜欢有始有终的,方便找代码块结束位置
end_def,end_for,end_if,end_class,end_try = "#","#","#","#","#"
def ToolDataProcess(cycle,num):
    ts = time.time() #开始计时
    i,j,k,l,cycle,num = 0,1,0,0,cycle,num #测试循环次数、单次循环数据个数
    X,Y,Z = [[] for kk in range(cycle*num+1)],[[] for kk in range(cycle*num+1)],[[] for kk in range(cycle*num+1)] #创建一维列表X、Y、Z
    for line in open("Cart.CSV"): #读取csv文件(一行一行读)
        x,y,z = line.split(",") #解析分隔符
        x,y,z = x.strip(' \t\r\n'),y.strip(' \t\r\n'),z.strip(' \t\r\n') #提取数据
        X[j],Y[j],Z[j] = float(x),float(y),float(z) #字符类型转换,并存入列表
        #print(j,"---",'\t' + str(X[j]),'\t' + str(Y[j]),'\t' + str(Z[j]))
        j += 1
    end
    XX,YY,ZZ = [[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)] #创建一维列表XX、YY、ZZ
    for ii in range(cycle+1): #XX,YY,ZZ中每个都有100个列表
        for jj in range(num+1): #每个列表中都存放37个数据
            XX[ii].append(0),YY[ii].append(0),ZZ[ii].append(0) #二维列表
        end
    end
    m,n,o = 1,1,1
    #for m in range(cycle):
    #for n in range(0+((m-1+1)*num),(num*(m+1))-1): #索引从0开始时
    for m in range(1,cycle+1):
        for n in range(1+((m-1)*num),num*m+1):
            XX[m][o],YY[m][o],ZZ[m][o] = X[n],Y[n],Z[n] #分类
            o += 1
        end
        o = 1
    end
    for i in range(cycle+1): #移除初始化中的无用值0
        del XX[i][0]
        del YY[i][0]
        del ZZ[i][0]
    end
    MaxX,MinX = [[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)]
    MaxY,MinY = [[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)]
    MaxZ,MinZ = [[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)]
    SumX,SumY,SumZ = [[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)]
    AveX,AveY,AveZ = [[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)],[[] for kk in range(cycle+1)]
    ValueX,ValueY,ValueZ = 0,0,0
    OutCsvPath1 = 'C:/Users/Robot/Desktop/AveValue.csv' #保存CSV文件路径及文件名称
    OutCsvPath2 = 'C:/Users/Robot/Desktop/SumValue.csv'
    OutCsvPath3 = 'C:/Users/Robot/Desktop/MaxMinValue.csv'
    OutCsvFile1 = open(OutCsvPath1,'w',newline='') #打开文件
    OutCsvFile2 = open(OutCsvPath2,'w',newline='')
    OutCsvFile3 = open(OutCsvPath3,'w',newline='')
    writerAveValue = csv.writer(OutCsvFile1)
    writerSumValue = csv.writer(OutCsvFile2)
    writerMaxMinValue = csv.writer(OutCsvFile3)    
    for i in range(1,cycle+1):
        for j in range(num):
            ValueX,ValueY,ValueZ = ValueX + XX[i][j],ValueY + YY[i][j],ValueZ + ZZ[i][j]
        end
        SumX[i],SumY[i],SumZ[i] = ValueX,ValueY,ValueZ #每组的和
        SumValue = [SumX[i],SumY[i],SumZ[i]]
        writerSumValue.writerow(SumValue)        
        print("第",i,"组的和",SumX[i],SumY[i],SumZ[i])
        AveX[i],AveY[i],AveZ[i] = ValueX/num,ValueY/num,ValueZ/num #每组的平均值
        AveValue = [AveX[i],AveY[i],AveZ[i]]
        writerAveValue.writerow(AveValue)
        print("第",i,"组的平均值:",AveX[i],AveY[i],AveZ[i])
        MaxX[i],MinX[i],MaxY[i],MinY[i],MaxZ[i],MinZ[i] = max(XX[i]),min(XX[i]),max(YY[i]),min(YY[i]),max(ZZ[i]),min(ZZ[i]) #每组的最大最小值
        MaxMinValue = [MaxX[i],MinX[i],MaxY[i],MinY[i],MaxZ[i],MinZ[i]]
        writerMaxMinValue.writerow(MaxMinValue)        
        print("第",i,"组的最大最小值:",max(XX[i]),min(XX[i]),max(YY[i]),min(YY[i]),max(ZZ[i]),min(ZZ[i]))
        ValueX,ValueY,ValueZ = 0,0,0
    end
    OutCsvFile1.close()
    OutCsvFile2.close()
    OutCsvFile3.close()
    print(X[3700],Y[3700],Z[3700])
    print(XX[100][36],YY[100][36],ZZ[100][36])
    print(X[1],Y[1],Z[1])
    print(XX[1][0],YY[1][0],ZZ[1][0])
    print("处理数据用时:",(time.time() - ts)*1000," ms")
end
cycle,num = 100,37 #测试循环次数、单次循环数据个数
ToolDataProcess(cycle,num)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值