我有一个rfid阅读器连接到树莓派。当我扫描一张卡片时,我得到一个存储在我的python文件中的UID号码为“backData”我想将所有用户存储在一个单独的文件中(IE:csv或txt文件),而不是我的代码顶部然后读取该文件以进行身份验证并提取相关行。我目前的python代码如下:
user1 = [1,23,45,678,987]
user2 = [9,87,65,432,123]
if backData == user1:
f = open("/mnt/lock_logs/lock_log.csv", "a");
print f
value = ('\n' 'user1,FOB,') + (',') + time.strftime("%c")
myString = str(value)
f.write(myString)
f.close()
GPIO.digitalWrite(RELAY, GPIO.HIGH)
GPIO.digitalWrite(LEDBLUE, GPIO.LOW)
GPIO.digitalWrite(LEDGREEN, GPIO.HIGH)
print "Access Granted"
time.sleep(1)
GPIO.digitalWrite(RELAY, GPIO.LOW)
time.sleep(3)
GPIO.digitalWrite(LEDGREEN, GPIO.LOW)
GPIO.digitalWrite(LEDBLUE, GPIO.HIGH)
所以理想情况下,我会读取一个csv文件,找到UID,然后将该行打印到日志中。 csv文件看起来像这样。
[1,23,456,78,987], Full Name
提前感谢您审核我的问题。
答案 0 :(得分:0)
下面的内容会将文件读入脚本中的dict。
import csv
users = {}
with open('users.csv', 'r') as fp:
reader = csv.reader(fp)
for row in reader:
id = row[0][1:-1].split(',')
name = row[1]
users[id] = name
这将为你建立一个名字的ID。但老实说,为什么不只是使用json和dump()/ load()作为一个整体的文件?是否被其他程序或服务使用?你的主要困难是将文本表示转换为数据表示,像json那样的格式,为什么不使用它们?
如果它是json格式,它将是:
import json
users = {}
with open('users.json', 'r') as fp:
users = json.load(fp)
与我在第一个版本中做出的假设相比,它更不容易出错。一旦加载,生成的users
看起来像这样:
{
[1,23,45,678,987]: 'name1',
[9,87,65,432,123]: 'name2'
}
所以要得到用户:
if users.get(backData, None) in ('name1', 'name2'):
#stuff
的
if users.get(backData, None) is not None:
#stuff
json只是一种序列化格式。因此,无论您调用dump()的数据结构是什么,都会在调用load()时获得。查看docs。
答案 1 :(得分:0)
以下是我用来完成此任务的代码..
uid_dict = dict()
uid_file = "/mnt/lock_logs/users.txt"
log_file = "/mnt/lock_logs/lock_log.csv"
fieldnames = ['UUID', 'USERS']
# UID DICTIONARY
with open(uid_file, "r") as f:
reader = csv.DictReader(f, fieldnames=fieldnames, delimiter=",")
for row in reader:
uid_dict[row['USERS'].strip()] = [int(i) for i in row['UUID'].split()]
for key, value in uid_dict.iteritems():
if backData == value:
with open(log_file, "a") as f:
f.write(key + "\n")
GPIO.output(RELAY, GPIO.HIGH)
time.sleep(1)
GPIO.output(RELAY, GPIO.LOW)
break