PySerial und readline() return Binär-string - konvertieren reguläre alphanumerische Zeichenfolge?
Ich habe ein Problem mit PySerial und Python (3.3): Der code, den ich verwende (für jetzt, dies ist nur ein einfacher test-Fall) ist wie folgt:
ser = serial.Serial('/dev/ttyACM0', 115200)
result = ser.readline()
parsed = result.split(",")
welche gibt die folgende Fehlermeldung:
TypeError: type str doesn't support the buffer API
Was ist mein blöder Fehler? Ich glaube, ich habe verfolgt dies auf die Tatsache, dass die PySerial - readline-Rückkehr ist ein Binär-string (neu in python 3?) und dass die string-operation "split" ist zu Versagen, wenn gegen einen Binär-string - es funktioniert gut, wenn Sie dies ausführen:
'1234, asdf, 456, jkl'.split(",")
Welche gibt die zu erwartenden:
['1234', 'asdf', '456', jkl']
Aber dann läuft:
b'1234, asdf, 456, jkl'.split(",")
gibt den oben genannten Fehler. Gibt es eine andere Methode readline zu benutzen? sollte ich code meine eigenen mit Lesen (und Lesen Sie einfach, bis Sie es sieht /r/n) oder kann ich problemlos konvertieren in eine Zeichenfolge, die zu erfüllen str.isalnum()? Danke!
InformationsquelleAutor Sam.T.Pratt | 2012-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Schnellste Lösung wird es sein, verwenden Sie ein python-Modul namens binascii, hat eine Auswahl von Funktionen zur Umwandlung der Binär-string in einen ascii-string: http://docs.python.org/2/library/binascii.html
BEARBEITEN:
Das b bedeutet, dass es ein byte-array und nicht eine wörtliche Zeichenfolge. Der richtige Weg zum konvertieren des byte-Arrays zu einem litteral-string verwenden Sie den str () - Funktion:
str(b', 1234, asdf, 456, jkl', 'ascii').split(",")
dieser gibt die Ausgabe, die Sie wollen:
['1234', 'asdf', '456', jkl']
Ich hoffe, das hilft!
Ok, also meine Antwort war falsch, aber ich habe bearbeitet es, was hoffentlich eine funktionierende Lösung!
vielen, vielen Dank!
InformationsquelleAutor Enthral