Pyserial读取串口数据写入文本文件内容异常,该如何解决?
问题原因
你读取的串口数据里包含了ANSI终端转义序列,这类控制字符用于控制终端光标位置、文字样式、颜色等,IDE的控制台会自动解析并隐藏这类控制符,所以你在IDE里看到的显示是正常的,但直接写入文件时控制符会被原样保留,导致文件内容异常。
解决方法
使用正则表达式过滤掉所有ANSI转义序列后再写入文件即可,匹配ANSI转义序列的规则如下:\x1b\[[0-9;]*[a-zA-Z]
修改后的代码片段
在你原有的decode_bytes = reading.decode()代码之后,增加过滤逻辑:
import re # 过滤ANSI转义序列 ansi_escape = re.compile(r'\x1b\[[0-9;]*[a-zA-Z]') clean_text = ansi_escape.sub('', decode_bytes) # 写入过滤后的内容 with open('test_data.txt', 'w', encoding='utf-8') as f: f.write(clean_text)
补充说明
- 如果测试后发现还有残留的特殊字符,可以根据实际输出的异常字符调整正则匹配规则,进一步过滤无效内容
- 写文件时显式指定
encoding='utf-8'可以避免不同系统默认编码不一致导致的乱码问题
内容的提问来源于stack exchange,提问作者Lane
相关产品推荐
相关产品推荐

