Jupyter Notebook中怎么设置Python输出字体颜色
全面解析在Jupyter Notebook中设置Python输出字体颜色的方法,包括ANSI转义序列、IPython.display富文本HTML渲染以及Rich库的实现与底层原理对比。
在 Jupyter Notebook 中改变 Python 文本输出的字体颜色,核心解决路径通常分为两类:一是使用标准 ANSI 转义序列(ANSI Escape Sequences),直接配合原生的 print() 函数使用,兼顾轻量与终端跨平台兼容;二是利用 IPython 环境内置的 IPython.display 模块,向页面渲染富文本 HTML 或 Markdown 内容,支持全色域与 CSS 样式调整。如果追求更易读的代码风格与复杂表格排版,也可以借助第三方库 rich 或 colorama 实现。
一、使用 ANSI 转义序列(零依赖标准方案)
Jupyter Notebook 的前端输出组件内置了对 ANSI 转义序列的解析器。这意味着即使不导入任何额外模块,也可以通过字符串中嵌入控制字符直接为 print() 的输出赋予颜色。
1. 基本语法与调用示例
ANSI 转义码的通用格式为 \033[显示方式;前景色;背景色m文本内容\033[0m。其中 \033[ 为转义引导符(也可以写成 \x1b[),而末尾的 \033[0m 则是用于复位所有样式的重置码。
# 示例 1:打印常见彩色文本
print("\033[31m这是红色文字\033[0m")
print("\033[32m这是绿色文字\033[0m")
print("\033[34m这是蓝色文字\033[0m")
# 示例 2:组合显示方式(1为加粗)与背景颜色(43为黄色背景)
print("\033[1;37;41m加粗白字红底警示\033[0m")
print("\033[4;33m黄色带下划线文字\033[0m")
2. 常用颜色与样式代码速查
| 颜色名称 | 前景色代码 | 背景色代码 | 常见样式代码 |
|---|---|---|---|
| 黑色 (Black) | 30 |
40 |
0: 默认/重置所有属性 |
| 红色 (Red) | 31 |
41 |
1: 高亮 / 加粗 (Bold) |
| 绿色 (Green) | 32 |
42 |
4: 下划线 (Underline) |
| 黄色 (Yellow) | 33 |
43 |
7: 反显 (前景色与背景色互换) |
| 蓝色 (Blue) | 34 |
44 |
90-97: 高亮前景明亮色系 |
| 洋红 / 紫色 (Magenta) | 35 |
45 |
100-107: 高亮背景明亮色系 |
| 青色 (Cyan) | 36 |
46 |
— |
| 白色 (White) | 37 |
47 |
— |
避坑要点:切记在带有样式的文本结尾添加 \033[0m。如果遗漏,控制台的颜色状态将持续生效,导致之后的普通 print("hello") 或运行报错信息也被动渲染为相同的背景与前景色。
二、使用 IPython.display 富文本渲染(全色域与 CSS 控制)
由于 Jupyter Notebook 运行在浏览器环境下,其输出单元能够直接解析 HTML 和 CSS。当需要使用具体的十六进制颜色(例如品牌色 #8A9478)、调节字体大小或排版时,IPython.display 是最佳方案。
1. HTML 与 Markdown 模式调用
通过导入 HTML 或 Markdown 类,可以直接在输出单元中生成样式化元素:
from IPython.display import display, HTML, Markdown
# 方式 A:使用 HTML 与行内 CSS(支持 Hex、RGB 等精确色彩)
html_content = '<span style="color: #E67E22; font-weight: bold; font-size: 16px;">这是橙色的大号加粗文本</span>'
display(HTML(html_content))
# 方式 B:结合 Markdown 解析
md_content = '<span style="color: #2980B9;">这是通过 Markdown 解析的蓝色文字</span>'
display(Markdown(md_content))
2. 为什么 print("<span style='...'>") 会失效?
很多初学者容易产生一个混淆:既然 Jupyter 运行在网页里,为什么直接执行 print("<span style='color:red'>文本</span>") 不能变成红色,反而把这串标签原封不动打印了出来?
原因在于底层消息传输通道的 MIME 类型不同。print() 将数据写入 Python 的 sys.stdout 标准流,Jupyter 内核将其打包为 stream: text/plain 类型的消息。前端收到纯文本流后,为了防止 XSS 脚本注入攻击,会对所有的 HTML 特殊字符(如 < 和 >)进行自动转义转为普通字符显示;而 display(HTML(...)) 则使用的是专门的 display_data 通道,其 MIME 类型被明确标记为 text/html,前端才会调用浏览器的 DOM 引擎将其作为真正的网页元素解析与渲染。
三、使用第三方扩展库(Rich 与 Colorama)
如果觉得手工拼接 ANSI 转义序列繁琐且容易遗忘重置码,同时又希望语法比 HTML 更加贴合终端脚本,可以引入成熟的第三方着色库。
1. Rich 库:直观的标记标签
rich 是现代 Python 最受欢迎的终端格式化工具,不仅原生支持 Jupyter Notebook,还能自动在终端与网页之间取得一致的表现力:
# 首先确保安装:pip install rich
from rich import print
# 使用类似 BBCode 的简明标签设置前景色与样式
print("[bold red]错误:[/bold red]未找到对应的数据文件!")
print("[green]成功:[/green]任务已于 [cyan]18:30[/cyan] 正常完成。")
print("[yellow on black]警示提示[/yellow on black]")
2. Colorama 库:跨平台常量包装
colorama 将复杂的数字代码封装为易读的对象属性(如 Fore.RED、Back.YELLOW),适合维护已有命令行工程:
# 首先确保安装:pip install colorama
from colorama import Fore, Back, Style
print(Fore.RED + "红色字体输出" + Fore.RESET)
print(Back.GREEN + Fore.WHITE + "绿底白字状态提示" + Style.RESET_ALL)
四、方案对比与选型建议
在实际开发过程中,如何在这三种方案中做选择?可以从依赖成本、跨环境通用性以及展示需求三个核心维度来权衡:
五、常见问题排查与注意事项
- 导出 HTML / PDF 静态文档时的颜色保留:通过
nbconvert导出为 HTML 时,ANSI 颜色和IPython.display(HTML)均可被完整保留;但如果导出为 LaTeX/PDF,某些复杂的 HTML 标签可能会丢失样式,此时标准的 ANSI 控制码转换往往更为稳定。 - Windows 旧版命令行的兼容性:如果在本地终端或旧版 Windows 控制台运行含有 ANSI 代码的 Python 脚本,有时会显示类似
[31m的原始乱码。在 Jupyter Notebook 中不会发生此问题,因为 Jupyter 内核运行环境与前端展示组件原生支持 ANSI 语法解析。 - 封装轻量辅助函数:为避免在代码中频繁手写
\033[,推荐在 Notebook 顶部定义一个轻量的打印辅助函数:def color_print(text, color="green"): colors = { "red": "\033[31m", "green": "\033[32m", "yellow": "\033[33m", "blue": "\033[34m", "reset": "\033[0m" } prefix = colors.get(color, "") print(f"{prefix}{text}{colors['reset']}") # 像普通函数一样简洁调用 color_print("测试运行通过", "green")
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













