Python写入文件时如何去除多余的ANSI控制字符
问题原因
你看到的ANSI控制字符是程序输出时用于终端格式控制(比如调整文字颜色、清除当前行、移动光标等)的特殊序列,print输出时终端会直接解析执行这些序列,不会把序列本身显示出来,但写入文件时会原样保留所有字符,就出现了你看到的乱码前缀。
解决方法
核心思路是在写入文件前,用正则匹配移除所有ANSI转义序列,修改后的代码如下:
- 首先导入正则模块,定义ANSI序列匹配规则
import re # 匹配所有标准ANSI转义序列的正则 ansi_escape_pattern = re.compile(r'\x1B(?:[@-Z\\-_]|\[.*?[a-zA-Z])')
- 字节解码后增加过滤步骤
# 原有解码逻辑 newdata = Bytesdata.decode("utf-8") # 过滤掉所有ANSI控制字符 clean_data = ansi_escape_pattern.sub('', newdata)
- 将过滤后的干净内容写入文件
# 建议显式指定encoding避免不同系统编码不一致导致乱码 with open("test.txt", "a+", encoding="utf-8") as file: file.write(clean_data)
补充说明
你在文本中看到的[2K、[90m这类内容是文本编辑器无法识别ESC前缀(ASCII码为\x1b,属于不可见字符)才显示的残缺内容,上述正则已经覆盖了这类完整转义序列的匹配,不会残留格式字符。
内容的提问来源于stack exchange,提问作者user11578023
相关产品推荐
相关产品推荐

