【问题标题】:PySerial and readline() return binary string - convert to regular alphanumeric string?PySerial 和 readline() 返回二进制字符串 - 转换为常规字母数字字符串?
【发布时间】:2012-11-14 05:17:37
【问题描述】:

我遇到了 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() 的字符串?谢谢!

【问题讨论】:

    标签: string serial-port pyserial python-3.3


    【解决方案1】:

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

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

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

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

    希望对你有帮助!

    【讨论】:

    • 我不认为这能满足我的要求 - readline 返回的值只是一个“b 标记”字符串:'code' b'asdf, asdf, asdf' 'code ' - str.isalnum() 失败,我真的只需要去掉前导的“b” - 它以 ASCII 呈现,它只有一个二进制标志?我想我错过了一些东西。我没有看到看起来可以做到这一点的 binascii 方法。
    • 好的,所以我的回答是错误的,但我已经对其进行了编辑,以包含希望是可行的解决方案!
    猜你喜欢
    • 2018-10-29
    • 2021-05-09
    • 2014-08-02
    • 1970-01-01
    • 2023-03-02
    • 2015-01-20
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多