如何知道传入数据是否等于 CSV 文件的最后一行第一列

How to know if the incoming data is equal to the last row, first column of a CSV file

我正在阅读 Raspberry Pi 上的一些 QR 码,并将这些数据写入 CSV 文件,但问题是,当收到数据时,它在 CSV 文件中被垃圾邮件,我的意思是,一旦检测到 QR 码,只要 QR 显示给 Cam,它就会继续在 CSV 上写入数据,我希望该数据只写入一次。

CSV 文件仅包含一个 header,表示 "Orders:"。 我在 CSV 中写入数据、日期和时间,每一个都在一列中 我想到并尝试做但没有成功,是检查数据是否等于 CSV 文件最后一行的第一列,如果是则 pass,否则写入数据,如下:

import csv
import cv2

cap = cv2.VideoCapture(0)
detector = cv2.QRCodeDetector()

from datetime import date, datetime

today = date.today()
date = today.strftime("%d-%b-%Y")

now = datetime.now()
timeRN = now.strftime("%H:%M:%S")

while True:

  _, img = cap.read()  
    data, bbox, _ = detector.detectAndDecode(img)
    
    if(bbox is not None):
        for i in range(len(bbox)):
            cv2.line(img, tuple(bbox[i][0]), tuple(bbox[(i+1) % len(bbox)][0]), color=(255,
                     0, 0), thickness=2)
        cv2.putText(img, data, (int(bbox[0][0][0]), int(bbox[0][0][1]) - 10), cv2.FONT_HERSHEY_SIMPLEX,
                    1, (255, 250, 120), 2)
    
    if 'OrderNr' in data:
        with open('Orders.csv', mode='a+') as csvfile:
            
            csvfileWriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
            reader = readline()[-1]       
            lastRow = reader[-1]
            firstColumn = reader[1]
            if data in firstColumn:
                pass
            else:
                csvfileWriter.writerow([data, date, timeRN]) 
        a, b, c, d = data.split(',')
        print("data: ", a)
        print(b)
        print(c)
        print(d)
        lcd_print(a, b, c, d)   #just a method to print on LCD
        pass   

当我尝试这个时,我得到的是

lastRow = reader[-1]
IndexError: string index out of range

我在这里做错了什么?是我做错的方式吗?如果是,那么有没有其他方法或更简单的方法来做我想做的事情?

编辑: 代码已编辑

您可以保留一个始终保存最新数据的变量。如果新读取的数据等于那个,则忽略它,否则写入文件。

相关代码更改如下。

....

latest = None

while True:

  _, img = cap.read()  
    data, bbox, _ = detector.detectAndDecode(img)

    ....
    
    if 'OrderNr' in data:
        with open('Orders.csv', mode='a+') as csvfile:
            
            csvfileWriter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)

            if data != latest:
                csvfileWriter.writerow([data, date, timeRN])
                latest = data