You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python写入文件时如何去除多余的ANSI控制字符

问题原因

你看到的ANSI控制字符是程序输出时用于终端格式控制(比如调整文字颜色、清除当前行、移动光标等)的特殊序列,print输出时终端会直接解析执行这些序列,不会把序列本身显示出来,但写入文件时会原样保留所有字符,就出现了你看到的乱码前缀。

解决方法

核心思路是在写入文件前,用正则匹配移除所有ANSI转义序列,修改后的代码如下:

  1. 首先导入正则模块,定义ANSI序列匹配规则
import re

# 匹配所有标准ANSI转义序列的正则
ansi_escape_pattern = re.compile(r'\x1B(?:[@-Z\\-_]|\[.*?[a-zA-Z])')
  1. 字节解码后增加过滤步骤
# 原有解码逻辑
newdata = Bytesdata.decode("utf-8")
# 过滤掉所有ANSI控制字符
clean_data = ansi_escape_pattern.sub('', newdata)
  1. 将过滤后的干净内容写入文件
# 建议显式指定encoding避免不同系统编码不一致导致乱码
with open("test.txt", "a+", encoding="utf-8") as file:
    file.write(clean_data)

补充说明

你在文本中看到的[2K、[90m这类内容是文本编辑器无法识别ESC前缀(ASCII码为\x1b,属于不可见字符)才显示的残缺内容,上述正则已经覆盖了这类完整转义序列的匹配,不会残留格式字符。

内容的提问来源于stack exchange,提问作者user11578023

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:06:00