如何解决我正在开发一个面部识别和考勤系统,该系统将姓名和时间写入 CSV 文件,但同一个人被多次记录
我正在开发一个面部识别和考勤系统,该系统将姓名和时间写入 CSV 文件中。为了避免多次登录同一个人,我正在编写一个逻辑来检查姓名是否存在已经在考勤日志中了,如果没有,则考勤被looged。但是,尽管已经记录了一次,但同名的记录一遍又一遍,我无法理解问题。
这是代码片段:
在脸部下方画一个带有名字的标签
cv2.rectangle(frame,(left,bottom - 35),(right,bottom),(0,255),cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame,name,(left + 6,bottom - 6),font,1.0,(255,255,1)
#markAttendance(name)
with open('ATTLOG.csv',"r+") as g:
myDatalist = g.readlines()
nameList=[]
for line in myDatalist:
entry = line.split(',')
nameList.append(entry[0])
if name not in nameList:
now=datetime.now()
dtString = now.strftime('%H:%M:%S')
g.writelines(f'\n{name},{dtString}')
解决方法
您有一个逻辑错误:您将整个文件读入 nameList
,然后检查当前名称是否在 nameList
的第一项中。如果不是,则将其写入文件:如果您当前的名称稍后出现在 nameList
中,则尽管您不应该将其写入。
您需要阅读整个文件,然后检查它是否在您的 nameList
中任何地方,然后决定是否写入。
对于检查,您应该使用 set()
- 检查“在”比使用列表要快得多。
already_in_file = set()
with open('ATTLOG.csv',"r") as g: # just read
for line in g:
already_in_file.add(line.split(",")[0])
# process your current entry:
if name not in already_in_file:
with open('ATTLOG.csv',"a") as g: # append
now = datetime.now()
dtString = now.strftime('%H:%M:%S')
g.writelines(f'\n{name},{dtString}')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。