Python 每次更改变量时,CSV文件中的行都会被重写

Python 每次更改变量时,CSV文件中的行都会被重写,python,csv,Python,Csv,我对在python中使用CSV函数比较陌生,需要您的帮助 我有一个python程序,可以计算opencv中等高线之间的距离和角度,以后每次我按键盘上的h,这些数据都会存储在CSV文件中。问题是,每次我按下h,前面的一行就会被新行覆盖,而不是保存在新行中。有没有办法以CSV格式在新行中保存新变量 这是我的部分代码。整个代码很长,因此需要从中发布必要的部分- def calcDistHex(x6、y6、x5、y5、x4、y4、x3、y3、x2、y2、x、y): dist1=圆形(dist.eucl

我对在python中使用CSV函数比较陌生,需要您的帮助

我有一个python程序,可以计算opencv中等高线之间的距离和角度,以后每次我按键盘上的
h
,这些数据都会存储在CSV文件中。问题是,每次我按下
h
,前面的一行就会被新行覆盖,而不是保存在新行中。有没有办法以CSV格式在新行中保存新变量

这是我的部分代码。整个代码很长,因此需要从中发布必要的部分-


def calcDistHex(x6、y6、x5、y5、x4、y4、x3、y3、x2、y2、x、y):
dist1=圆形(dist.euclidean((x6,y6),(x5,y5)))
dist2=圆形(dist.欧几里德((x5,y5),(x4,y4)))
dist3=圆形(dist.欧几里德((x4,y4),(x3,y3)))
dist4=圆形(dist.欧几里德((x3,y3),(x2,y2)))
dist5=圆形(dist.欧几里德((x2,y2),(x,y)))
dist6=圆形(dist.欧几里德((x,y),(x6,y6)))
#打印(dist1)
cv2.putText(框架,str(dist1),(圆形(0.5*x6+0.5*x5),圆形(0.5*y6+0.5*y5)),字体,0.5,(0,0,0),1)
cv2.putText(框架,str(dist2),(圆形(0.5*x5+0.5*x4),圆形(0.5*y5+0.5*y4)),字体,0.5,(0,0,0),1)
cv2.putText(框架,str(dist3),(圆形(0.5*x4+0.5*x3),圆形(0.5*y4+0.5*y3)),字体,0.5,(0,0,0),1)
cv2.putText(框架,str(dist4),(圆形(0.5*x3+0.5*x2),圆形(0.5*y3+0.5*y2)),字体,0.5,(0,0,0),1)
cv2.putText(框架,str(dist5),(圆形(0.5*x2+0.5*x),圆形(0.5*y2+0.5*y)),字体,0.5,(0,0,0),1)
cv2.putText(框架,str(dist6),(圆形(0.5*x+0.5*x6),圆形(0.5*y+0.5*y6)),字体,0.5,(0,0,0),1)
pt6=x6,y6
pt5=x5,y5
pt4=x4,y4
pt3=x3,y3
pt2=x2,y2
pt1=x,y
m2=坡度(pt2,pt1)
n2=梯度(pt2,pt3)
如果m2不是无,n2不是无:
angR2=数学常数((n2-m2)/(1+(n2*m2)))
angD2=数学学位(angR2)
如果math.isnan(angD2)为False:
cv2.putText(frame,str(round(abs(angD2)),(pt2[0]-40,pt2[1]-20),字体,1,(0,0,0))
#打印(圆形(abs(angD2)),(pt1[0]-40,pt1[1]-20))
m3=坡度(pt3、pt2)
n3=梯度(pt3,pt4)
如果m3不是无,n3不是无:
angR3=数学常数((n3-m3)/(1+(n3*m3)))
angD3=数学学位(angR3)
如果math.isnan(angD3)为False:
cv2.putText(frame,str(round(abs(angD3)),(pt3[0]-40,pt3[1]-20),字体,1,(0,0,0))
#打印(圆形(abs(angD3)),(pt1[0]-40,pt1[1]-20))
m4=梯度(pt4,pt3)
n4=梯度(pt4,pt5)
如果m4不是无且n4不是无:
angR4=数学参数((n4-m4)/(1+(n4*m4)))
angD4=数学学位(angR4)
如果math.isnan(angD4)为False:
cv2.putText(frame,str(round(abs(angD4)),(pt4[0]-40,pt4[1]-20),字体,1,(0,0,0))
#打印(圆形(abs(angD4)),(pt1[0]-40,pt1[1]-20))
m5=梯度(pt5,pt4)
n5=梯度(pt5,pt6)
如果m5不是无,n5不是无:
angR5=数学参数((n5-m5)/(1+(n5*m5)))
angD5=数学学位(angR5)
如果math.isnan(angD5)为False:
cv2.putText(frame,str(round(abs(angD5)),(pt5[0]-40,pt5[1]-20),字体,1,(0,0,0))
#打印(圆形(abs(angD5)),(pt1[0]-40,pt1[1]-20))
m6=坡度(pt6、pt5)
n6=梯度(pt6,pt1)
如果m6不是无且n6不是无:
angR6=数学参数((n6-m6)/(1+(n6*m6)))
angD6=数学学位(angR6)
如果math.isnan(angD6)为False:
cv2.putText(框架,str(圆形(abs(angD6)),(pt6[0]-40,pt6[1]-20),字体,1,(0,0,0))
#打印(圆形(abs(angD6)),(pt1[0]-40,pt1[1]-20))
m=梯度(pt1,pt6)
n=梯度(pt1,pt2)
如果m不是无且n不是无:
angR=math.atan((n-m)/(1+(n*m)))
angD=数学学位(angR)
如果math.isnan(angD)为False:
cv2.putText(frame,str(round(abs(angD)),(pt1[0]-40,pt1[1]-20),字体,1,(0,0,0))
#打印(圆形(abs(angD)),(pt1[0]-40,pt1[1]-20))
如果cv2.waitKey(1)=ord('h'):
timestamp=int(time.time()*10000)
打开('dataset.csv','w',换行符='')作为数据集\u文件:
dataset=csv.exe(
数据集\u文件,
[“时间戳”、“形状”、“边1”、“边2”、“边3”、“边4”、“边5”、“边6”、“周长”、“角度1”、“角度2”、“角度3”、“角度4”、“角度5”、“角度6”、“角度和”、“错误”]
)
dataset.writeheader()
dataset.writerow({
“时间戳”:时间戳,
“形状”:“六边形”,
“Side1”:dist1,
“Side2”:dist2,
“Side3”:dist3,
“Side4”:dist4,
“Side5”:dist5,
“Side6”:dist6,
“周长”:(第1区+第2区+第3区+第4区+第5区+第6区),
“Angle1”:愤怒,
“Angle2”:angD2,
“角度3”:angD3,
“角度4”:angD4,
“Angle5”:angD5,
“角度6”:angD6,
“AngleSum”:(angD+angD2+angD3+angD4+angD5+angD6),
“错误”:“要做”
})
返回dist1、dist2、dist3、dist4、dist5、dist6、angD、angD2、angD3、angD4、angD5、angD6;
这是存储文件的已定义函数

此函数稍后在另一个循环中调用-

如果len(近似值)=6:
对于j in n:
如果(i%2==0):
x6=n[i-10]
y6=n[i-9]
x5=n[i-8]
y5=n[i-7]
x4=n[i-6]
with open('dataset.csv', 'w', newline='') as dataset_file:
with open('dataset.csv', 'a', newline='') as dataset_file:
dataset.writeheader()
with open('dataset.csv', 'w', newline='') as dataset_file:
    dataset = csv.DictWriter(
        dataset_file,
        ["timestamp", "shape", "Side1", "Side2", "Side3", "Side4", "Side5", "Side6", "Perimeter", "Angle1", "Angle2", "Angle3", "Angle4", "Angle5", "Angle6", "AngleSum", "Error"]
    )
    dataset.writeheader()