Python中如何清理readline读取的微控制器返回数据
串口读取数据去除空bytes解决方案
你遇到的b''输出有两个核心原因:
- 你当前直接打印的是
bytes类型对象,Python默认会给bytes类型的输出加上b前缀和引号包裹标识,这不属于数据本身的内容 - 当串口读取超时、或者缓冲区没有有效数据时,
ser.readline()会直接返回空的bytes对象b''
对应的解决步骤如下:
- 第一步:先过滤空的bytes返回值,再将bytes解码为字符串
如果你的微控制器返回的是UTF-8编码的文本,可直接用如下代码处理:
bs = ser.readline() # 仅处理非空的返回值 if bs: # 替换换行、回车字符后解码为字符串 clean_str = bs.replace(b'\n', b' ').replace(b'\r', b' ').decode('utf-8') # 也可以用strip()方法直接删除首尾所有空白字符(包含换行、回车、空格),按需选择即可 # clean_str = bs.strip().decode('utf-8') # 可选:过滤处理后仍为空的字符串 if clean_str.strip(): print(clean_str)
- 第二步:适配非UTF-8编码场景
如果你的微控制器用的是GBK等其他编码,修改decode方法的编码参数即可,遇到特殊字符解码报错时可以加忽略错误的参数:
# GBK编码示例 clean_str = bs.replace(b'\n', b' ').replace(b'\r', b' ').decode('gbk', errors='ignore')
注意:如果需要完全删除换行、回车字符,把替换的目标从
b' '改成b''即可。
内容的提问来源于stack exchange,提问作者engr_john
相关产品推荐
相关产品推荐

