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)