2012-11-14 13 views
2

我在与PySerial和Python的问题(3.3):我运行的代码(现在,这只是一个简单的测试用例)如下:PySerial和readline()返回二进制字符串 - 转换为常规字母数字字符串?

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()的字符串吗?谢谢!

回答

2

最快的解决方案将是使用称为binascii一个python模块,其具有选择的功能,用于二进制串转换为ASCII字符串:http://docs.python.org/2/library/binascii.html

编辑: 在B意味着它是一个字节数组,并不是一个文字字符串。将字节数组转换为字符串的正确方法是使用str()函数:

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

这给你想要的输出: [ '1234', '自卫队', '456',JKL']

我希望帮助!

+0

我不认为这就是我要找的--readline返回的值只是一个“b-flagged”字符串:'code'b'asdf,asdf,asdf''code' - 失败str .isalnum()我真的只需要去掉前面的“b” - 它用ASCII表示,它只是一个二进制标志?我想我错过了一些东西。我没有看到看起来这样做的binascii方法。 –

+0

好,所以我的回答错了,但我已经编辑它,包括希望工作的解决方案! – Enthral

+0

非常感谢你! –

相关问题