Python中,控制终端文本颜色的常见用法和具体说明【增加输出美观度】

首先先观察如下代码:

print('\033[91m' + '-' * 60 + '\033[0m')  # 91m对应红色,92m对应绿色 
print(' ' * 20 + '\033[92mBruce is the best!' + '\033[0m')
print('\033[31m' + '-' * 60 + '\033[0m') # '\033[0m':重置所有终端样式(颜色、粗体等),确保后续输出不受红色影响。

 乍一看,除了第二行代码的中间部分能够看懂一些,仿佛是在打印字符串。

其他代码看上去非常奇怪,那这代码到底是有何作用?

直接看打印结果即可马上理解。

这段代码使用 ANSI 转义码来控制终端文本颜色,具体是将 60 个 - 字符以某种颜色(这里是红色,\033[91m)打印为分隔线,并通过 \033[0m 重置颜色以避免影响后续输出。我将:

接下来

  1. 我将列举所有常见的 ANSI 颜色代码及其输出效果。
  2. 并提供一个更美观的代码示例,展示不同颜色的分隔线。【加深大家直观感受】

ANSI 转义码支持多种前景色(文本颜色)和背景色。以下是常见的 前景色 代码(适用于类似 \033[XXm 的格式),我将列出标准颜色和亮色变体,并描述其输出效果。

标准前景色(30-37)

代码颜色描述
\033[30m 黑色 深黑色,暗环境可能难见
\033[31m 红色 标准红色,醒目
\033[32m 绿色 标准绿色,清新
\033[33m 黄色 标准黄色,温暖
\033[34m 蓝色 标准蓝色,冷静
\033[35m 紫色 标准紫色(洋红色),优雅
\033[36m 青色 标准青色,鲜亮
\033[37m 白色 浅灰色或白色,干净

亮前景色(90-97,高强度)

代码颜色描述
\033[90m 亮黑色 深灰色,较黑色更可见
\033[91m 亮红色 鲜艳红色,更明亮
\033[92m 亮绿色 鲜艳绿色,生动
\033[93m 亮黄色 鲜艳黄色,非常醒目
\033[94m 亮蓝色 鲜艳蓝色,清新
\033[95m 亮紫色 鲜艳紫色(亮洋红),华丽
\033[96m 亮青色 鲜艳青色,耀眼
\033[97m 亮白色 纯白色,极亮

重置代码

代码作用描述
\033[0m 重置样式 恢复终端默认颜色和样式

注意

  • 实际颜色效果取决于终端的配色方案(例如,黑色背景或白色背景)。
  • 一些终端(如 Windows CMD)默认不支持 ANSI 码,可能需要 colorama 库或启用虚拟终端支持。

 

3. 更美观的代码示例

为了展示所有常见颜色的分隔线,并增加代码美观性,我将:

  • 定义一个函数,打印不同颜色的分隔线。
  • 使用字典存储颜色代码和名称,便于管理和扩展。
  • 添加居中提示文本,增强视觉效果。
  • 确保代码结构清晰,注释明确。

以下是改进后的代码:

def print_colored_separator(color_code, color_name, length=60, message=None):
    """
    打印带有指定颜色的分隔线,并可选地显示居中消息。
    
    参数:
        color_code (str): ANSI 颜色代码(如 '\033[91m')。
        color_name (str): 颜色名称,用于提示信息。
        length (int): 分隔线长度,默认为 60。
        message (str): 可选的居中消息文本。
    """
    reset_code = '\033[0m'  # 重置样式
    separator = '-' * length
    
    # 打印分隔线
    print(f'{color_code}{separator}{reset_code}')
    
    # 如果有消息,居中打印
    if message:
        padding = ' ' * ((length - len(message)) // 2)
        print(f'{padding}{color_code}{message}{reset_code}')
    
    # 打印分隔线
    print(f'{color_code}{separator}{reset_code}\n')

# 定义常见颜色代码和名称
colors = {
    'Black': '\033[30m',
    'Red': '\033[31m',
    'Green': '\033[32m',
    'Yellow': '\033[33m',
    'Blue': '\033[34m',
    'Purple': '\033[35m',
    'Cyan': '\033[36m',
    'White': '\033[37m',
    'Bright Black': '\033[90m',
    'Bright Red': '\033[91m',
    'Bright Green': '\033[92m',
    'Bright Yellow': '\033[93m',
    'Bright Blue': '\033[94m',
    'Bright Purple': '\033[95m',
    'Bright Cyan': '\033[96m',
    'Bright White': '\033[97m'
}

# 打印所有颜色的分隔线
for color_name, color_code in colors.items():
    print_colored_separator(
        color_code=color_code,
        color_name=color_name,
        message=f'{color_name} Separator'
    )

4. 输出效果

运行上述代码(假设终端支持 ANSI 颜色)将生成以下输出(pycharm实际终端会显示对应颜色):

5. 代码美观性改进说明

  1. 模块化
    • 定义了 print_colored_separator 函数,封装分隔线打印逻辑,便于复用。
    • 参数化 color_code、color_name、length 和 message,增加灵活性。
  2. 结构清晰
    • 使用字典 colors 组织颜色代码和名称,易于维护和扩展。
    • 添加详细的函数文档字符串,说明参数和功能。
  3. 视觉增强
    • 每种颜色显示两次分隔线,中间夹杂居中消息(如 “Red Separator”),使输出更美观。
    • 消息居中对齐(通过计算填充空格),提升对称性。
    • 每组分隔线后添加换行符(\n),分隔不同颜色。
  4. 可扩展性
    • 可以轻松添加其他 ANSI 样式(如背景色 \033[41m 或粗体 \033[1m)。
    • 支持自定义分隔线长度和消息内容。

6. 注意事项

  • 终端兼容性
    • ANSI 转义码在 Linux、macOS 终端和大多数现代 IDE 终端(如 VS Code)中默认支持。
    • 在 Windows CMD 或旧版 PowerShell 中可能无效。解决方法:
      • 使用 colorama 库(pip install colorama):
from colorama import init
init()  # 初始化 colorama

或在 Windows 10+ 启用虚拟终端支持。

  • 颜色可见性
    • 某些颜色(如黑色 \033[30m)在暗色终端背景上可能难以看到。
    • 亮色(如 \033[91m)通常更醒目,适合强调。
  • 跨平台考虑
    • 如果需要跨平台兼容,可以检测终端是否支持 ANSI 码,或提供无颜色的回退选项。

7. 扩展:添加背景色

如果想展示背景色,可以扩展 colors 字典,添加背景色代码(40-47 为标准背景色,100-107 为亮背景色)。示例:

colors.update({
    'Red Background': '\033[41m',
    'Green Background': '\033[42m',
    'Yellow Background': '\033[43m'
})

输出效果会是分隔线带有彩色背景(如红色背景的 - 字符)。


总结

  • 原始代码使用 \033[91m 打印红色分隔线,结合 \033[0m 重置样式。
  • 我列出了 16 种常见前景色(8 种标准色 + 8 种亮色),并描述了其效果。
  • 提供了一个美观的代码示例,通过函数化和居中消息增强视觉效果,展示了所有颜色的分隔线。
  • 输出效果在支持 ANSI 的终端中为彩色分隔线,适用于日志、调试或界面美化。

 

posted @ 2025-05-19 16:53  AlphaGeek  阅读(106)  评论(0)    收藏  举报