![](/img/trans.png)
[英]How do I extract data from a column in csv file in python in relation to the row it's in?
[英]How do I extract a row of a file in python?
我有一個連接到樹莓派的 rfid 閱讀器。 當我掃描卡片時,我將一個 UID 編號存儲在我的 python 文件中作為“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
預先感謝您審查我的問題。
類似下面的內容會將文件讀入腳本中的字典。
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() 時你都會得到什么。 查看文檔。
這是我用來完成此操作的代碼..
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.