我正在为我的研究小组开发一个访问控制系统,并且在使用数据库对用户进行身份验证时遇到了困难。 我需要遍历一定数量的行(在.xlsx文件中),并检查我具有的值是否与列上的任何值匹配。如果是这样,将授予访问权限。否则,我需要打印一条错误消息。 我想知道是否有更聪明的方法可以完成这项工作,因为据我检查openpyxl文档,它没有说任何有助于在遍历行时提取当前行的值的事情。
当前,我有一种硬编码的方式来使其工作,使用辅助变量(n),该变量在迭代的每一行中都递增。每次迭代都会测试'n'等于表中的行数。如果相等,则意味着循环已到达表的末尾并且找不到用户。
# Checks if the UID was succesfully stored and is accessible
for row in ws.iter_rows():
if row[5].value == user.pin:
print('Cadastro realizado com sucesso!')
wb.close()
del user
break
if n == ws.max_row:
print('Usuário não autorizado')
wb.close()
gpio.output(10, gpio.LOW)
del user
n = 0
n = n + 1
我一直在寻找诸如row.row
或row.value
之类的替代方法,这些替代方法可让我在迭代时返回当前所在的行。
答案 0 :(得分:1)
由于ws.iter_rows()
返回一个可迭代对象,因此您可以在遍历工作表时使用Python内置的https://github.com/google/libphonenumber函数来获取索引。它的工作原理几乎与您当前在幕后的解决方案一样,但是使代码更简洁,更具可读性。
您的代码如下:
# Checks if the UID was succesfully stored and is accessible
for idx, row in enumerate(ws.iter_rows()):
if row[5].value == user.pin:
print('Cadastro realizado com sucesso!')
wb.close()
del user
break
if idx + 1 == ws.max_row:
print('Usuário não autorizado')
wb.close()
gpio.output(10, gpio.LOW)
del user