PySerial和readline()返回二进制字符串 - 转换为常规字母数字字符串?

时间:2012-11-14 05:17:37

标签: string serial-port pyserial python-3.3

我遇到了PySerial和Python(3.3)的问题:我正在运行的代码(现在,这只是一个简单的测试用例)如下:

ser = serial.Serial('/dev/ttyACM0', 115200)
result = ser.readline()
parsed = result.split(",")

会出现以下错误:

TypeError: type str doesn't support the buffer API

我的愚蠢错误是什么?我想我已经追溯到PySerial的readline返回二进制字符串(python 3中的新内容?)并且字符串操作“split”在针对二进制字符串运行时失败的事实 - 如果运行它,它可以正常工作:

'1234, asdf, 456, jkl'.split(",")

给出了预期的结果:

['1234', 'asdf', '456', jkl']

然后跑步:

b'1234, asdf, 456, jkl'.split(",")

给出了上面的错误。是否有不同的readline方法可供使用?我应该用read编写自己的代码(只读它直到看到/ r / n)或者我可以轻松转换为满足str.isalnum()的字符串吗?谢谢!

1 个答案:

答案 0 :(得分:2)

最快的解决方案是使用名为binascii的python模块,该模块具有将二进制字符串转换为ascii字符串的一系列函数:http://docs.python.org/2/library/binascii.html

编辑: b表示它是一个字节数组而不是文字字符串。将字节数组转换为litteral字符串的正确方法是使用str()函数:

str(b'1234,asdf,456,jkl','ascii')。split(“,”)

这给出了你想要的输出: ['1234','asdf','456',jkl']

我希望有所帮助!