Python: Daten aus einer .csv Datei mit einer Variable vergleichen?
Wie kann ich das am besten machen?
Habe es schon so versucht:
import serial
import csv
def Scan():
from testmain import SingleInventory
epc = SingleInventory()
return epc
tag = Scan()
reader = csv.reader(open("memory.csv","r"), delimiter=",")
for row in reader:
print (row)
with open('memory.csv',mode='r') as infile:
inreader = csv.reader(infile)
with open('memory_new.csv',mode='w') as outfile:
outwriter = csv.writer(outfile)
tagDict = {rows[0]:rows[1] for rows in reader}
while True:
tag2 = Scan()
if tag2 in tagDict:
result = [s for s in tagList if tag2 in s]
print(result[0][48:])
Was aber leider nicht funktioniert (falls jemand weiß wieso es nicht geht auch gerne mit in die Antwort)
Die Variable ist ein RFID Tag und in der .csv werden in der 1. Spalte die Tags gespeichert und in der 2. stehen Positionsangaben (in Meter)
2 Antworten
Dein Code sieht ziemlich umständlich aus. In deiner ersten Schleife iterierst du doch bereits über alle Zeilen der CSV-Datei, wieso öffnest du sie also nochmals zum Öffnen und Schreiben?
Mit DictReader kannst du dir die CSV in eine Map hineinspeichern lassen. Danach folgt die Überprüfung. Dies dürfte so aussehen:
import csv
with open('memory.csv') as csvfile:
reader = csv.DictReader(csvfile, filenames=('RFIDTag', 'Position'))
for row in reader:
if row['RFIDTag'] == tag:
# do something
Was konkret in der Variable tag steht, solltest du dir zur Laufzeit auch einmal anschauen, falls es beim Vergleich weiterhin Probleme gibt.
Wieso habe ich eigentlich die Dokumentation zu der Funktion verlinkt?
Ich habe mich oben vertippt, es muss fieldnames lauten. Dieser Parameter gibt die Keys an, über die die Spalten der CSV aufgerufen werden können.
Habe sowas mal in C# gemacht.. da habe ich mit einer for each Schleife jede Zeile in einen Array geschrieben und NACHDEM die Variablen geschrieben waren habe ich vergleichen. Teste das mal.
Ich glaub ich hab das ein bisschen unverständlich erklärt..
Die Tags in der .csv Datei stehen schon vor dem Start des Programms drin (werden vorher mit einem anderem Programm dort reingeschrieben)
Mir geht es darum, dass das Programm den Tag der durch ne Schleife immer wieder eingelesen wird mit den Tags vergleicht die in der Datei stehn und wenn in der Datei ein Tag mit der selben ID steht soll der Wert aus der nächsten Zeile ausgegeben werden.
Gibt da nur leider ein kleines Problem:
Und ich versteh nicht ganz wozu
ist, muss ich da dann selbst ne Variable einfügen oder was mach ich damit?