我正在閱讀 Raspberry Pi 上的一些 QR 碼,并將該資料寫入 CSV 檔案,但問題是,當收到資料時,它會在 CSV 檔案中發送垃圾郵件,我的意思是,只要QR碼被檢測到,只要將QR顯示給Cam,它就會繼續將資料寫入CSV,并且我希望該資料只寫入一次。
CSV 檔案只包含一個標題,上面寫著"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
我在這里做錯了什么?我做錯了嗎?如果是,那么還有其他方法或更簡單的方法來做我想做的事情嗎?
編輯:代碼已編輯
uj5u.com熱心網友回復:
您可以保留一個始終保存最新資料的變數。如果新讀取的資料等于該值,則忽略它并寫入檔案。
相關代碼更改如下。
....
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/417023.html
標籤:
上一篇:洗掉熊貓csv行內的選擇
