2017-07-11 6 views
0

Ich arbeite mit RC-522 RFID Reader für mein Projekt. Ich möchte es für die Zahlung der Transportkosten verwenden. Ich verwende Python und verwendet, um den Code in: https://github.com/mxgxw/MFRC522-python.gitWie konvertiert man einen String in eine Liste mit Python?

Auf Python-Skript Read.py, Sector 8 wurde mit der Verwendung dieses Codes lesen:

# Check if authenticated 
    if status == MIFAREReader.MI_OK: 
     MIFAREReader.MFRC522_Read(8) <---- prints the sector 8 
     MIFAREReader.MFRC522_StopCrypto1() 
    else: 
     print "Authentication error" 

Der Ausgang dieses war:

Sector 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

Also diesen letzten Teil (Sektor 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), wandle ich es in String um . Ich möchte, dass das eine Liste ist, aber ich kann nicht. Versucht, es auf eine Variable x zu setzen und x.split() zu verwenden, aber die Ausgabe, wenn ich print (x) ausführe, ist "None".

x = str(MIFAREReader.MFRC22_READ(8)) 
x = x.split() 
print x #PRINTS ['NONE'] 

Ich mag es so sein:

DATA = [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

so, dass ich die Summe (DATA) für die Balance überprüfen kann, und ich kann es wie DATA Indizes zugreifen [0]

Vielen Dank !!

+0

Woher kommen diese Werte (* 100,0, etc *)? – patrick

+0

Die Werte können geschrieben und bearbeitet werden. Es ist ein Sektor von RFID-Karte. – RainDV

+0

Was passiert, wenn Sie es nicht teilen und nur 'drucken (x)'? – salparadise

Antwort

1

folgenden Schritte aus:

  1. öffnen MFRC522.py >> Header-Datei für RFID Reader

    vi MFRC522.py

    sucht Funktion

def MFRC522_Read(self, blockAddr)

fügen Sie diese Zeile return backData am Ende der Funktion.

Speichern Sie es.

  1. In read() Programm, nennen Sie es wie

DATA=(MIFAREReader.MFRC522_Read(8)) print 'DATA :',DATA

Ich hoffe, dass dies das Problem löst.

0

Sie können .split (",") verwenden, um das Trennzeichen "," anzugeben.

So etwas:

input_string = "[100, 234, 0, 0, 567, 0, 0, 0, 3, 0, 235, 0, 0, 12, 0, 0]" 

listed_string = input_string[1:-1].split(",") 
sum = 0 

for item in listed_string: 
    sum += int(item) 

print(sum) 

druckt

1151 
+0

Der Anfangswert der Zeichenfolge ist: "Sektor 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]". Wie kann ich diesen "Sektor 8" entfernen? Wenn ich split() verwende und diese Zeichenfolge drucke, wird "[None]" ausgegeben. – RainDV

0

Wenn Sie eine Garantie über die Herkunft und die Art der Daten, die in dieser Liste (und Sie wissen, das Format immer das gleiche sein wird,), Python's eval würde funktionieren. Zum Beispiel:

original_string = 'Sector 8 [100, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]' 
data_start_index = original_string.index('[') # find '[' 
data_string = original_string[data_start_index:] # extract the list 
data = eval(data_string) 
print(type(data)) # <class 'list'> 
print(sum(data)) # 101 

Wenn Sie nicht über diese Garantien haben, werden Sie die split Methode verwenden, wie durch Moutch vorgeschlagen, aufgrund der Fragilität und Verwertbarkeit von eval - führt sie blind, was (möglicherweise gefährliche) Code wird an ihn übergeben.

Bearbeiten: Verwenden Sie ast.literal_eval statt plain alt eval für Sicherheitsgarantien. Dies erfordert weiterhin, dass die Formatierung der Zeichenfolge konsistent ist (z. B. dass sie immer eckige Klammern aufweist), um eine korrekte Bewertung für eine Python-Liste zu erhalten.

+0

Der Anfangswert der Zeichenfolge lautet: "Sektor 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0] ". Wie kann ich diesen "Sektor 8" entfernen? Wenn ich split() verwende und diese Zeichenfolge drucke, wird "[Keine]" gedruckt. Ich muss zuerst herausfinden, wie es wird "[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]" nur – RainDV

+0

Sie können verwenden die Python-String-Methode 'index()', die den Index der ersten Instanz eines bestimmten Zeichens in einer Zeichenkette zurückgibt. Zum Beispiel gibt 'abcdefgh'.index ('c')' 2 zurück. Verwenden Sie also 'index()', um den Index von '[' zu finden und nehmen Sie einfach den Rest der Zeichenkette ab, der bei diesem Index beginnt. Ich habe meine Antwort bearbeitet, um das zu reflektieren. – orn688

0

Im Einklang mit Moutch Antwort, indem Liste Verständnis:

input='[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]' 
DATA = [int(item) for item in input[1:-1].split(',')] 
print(sum(DATA)) 

Wenn Datenstring gesamte Produktion von Read.Py ist

input="""Card read UID: 67,149,225,43 
Size: 8 
Sector 8 [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]""" 
#find index position of 'Sector' text and select from this using slices. 
inputn = input[input.index('Sector')+9:] 
DATA = [int(item) for item in inputn[1:-1].split(',')] 
print(DATA) 
print(sum(DATA)) 
+0

ValueError: Teilstring nicht gefunden – RainDV

+0

inputn = Eingabe [Input.index ('Sector') + 9:] ValueError: Teilstring nicht gefunden. (Ich habe den ersten Buchstaben der Eingabe großgeschrieben, weil ich denke, es ist ein Befehl. Er wird violett, wenn getippt. – RainDV

+0

Eingang wird auf Eingabe var, die Ausgabe von Read.py speichert. Scheint, dass Sie Umgebung dies mit anderer Bedeutung erkennen (ich teste das in reinem Python 3.5) .Sie können diesen Variablennamen mit etwas anderem ersetzen, also: 'rfidout =" "" Karte gelesen UID: 67,149,225,43 Größe: 8 Sektor 8 [100, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] "" " #Finden Sie die Indexposition von 'Sector' Text und selektieren Sie daraus mit Slices. inputn = rfidout [rfidout.index ('Sektor') + 9:] DATA = [int (Element) für Element in inputn [1: -1] .split (',')] drucken (DATEN) drucken (Summe (DATEN)) ' – alvarez

Verwandte Themen