Python for循环仅将最后一个值保存到csv?

时间:2020-06-03 04:17:03

标签: python-3.x

在下面的代码行中用于轮廓检测及其在打印区域时进行相应的区域计算:打印所有值,但仅保存最后保存在CSV文件中的值

for cnt in contours:

    M= cv2.moments(cnt)
        #print(M)

    if M["m00"] != 0:

        cx = int(M["m10"] / M["m00"])
        cy = int(M["m01"] / M["m00"])
    else:
        cx, cy = 0,0

    center = (cx,cy)


    area = cv2.contourArea(cnt)
    #V1 = np.asarray(area)
    print(area)

    df = pd.DataFrame()
    df['Area'] = area

    df.to_csv("C:\pfm\dataframe_csv\L501.csv")

1 个答案:

答案 0 :(得分:0)

在循环的每次迭代中,您将创建一个新的空DataFrame,将一件事放入其中,然后将其写到文件中。每次,它都覆盖前一个输出,最后剩下的是最后一个。发生这种情况是因为默认情况下该文件是在写入模式下打开的。

(如果“写入模式”对您没有任何意义,则应在自己喜欢的语言参考中查看Python文件打开模式。)

幸运的是,to_csv函数具有一个mode参数,您可以将其设置为'a'来打开要附加的文件。如果这样做,则每次写入都应追加到文件末尾。

或者,您可以将所有输出累积在一个大的DataFrame中,并在循环终止后将整个内容写一次。这可能会更快,但需要更多的内存。