Python 输出简单彩色字符【ANSI 转义序列笔记】

"""
ASCII 码的 0-31 和 127 被称为 C0 控制字符
    例如 \07 就是 BEL, 响铃 (\0 表示八进制)

其中 \033 (十进制27, 十六进制x1B) 是 ESC, 转义字符, 它可以用于转义序列
    如 \033[ 表示序列导入 (Control Sequence Introducer),简写为 CSI
    也可写作 \x1b[

    两个字节的序列可以合并为 0x80-0x9F 范围内的单个字节, 即 C1 控制字符
    所以 \033[ 可以合并为 \x9b

ANSI转义序列中以 ESC [ 开头的叫作 Control Sequence Introducer
    大致可分四类:光标移动指令、清屏指令、字符渲染(Graphic Rendition)指令和终端控制指令
    例如:\x9bA 是上移 1 格,可以更新一行
    例如:\x9bF 可移到上一行开头,加上 \x9b2K 清空行,能让一行重新输出
    例如:\x9b2J 可清空屏幕,再加上\x9bH 可让光标移动到第1行第1列
    

CSI n A 光标上移 1 格
CSI n B 光标下移 1 格
CSI n C 光标左移 1 格
CSI n D 光标右移 1 格

CSI n E 光标下移 n 行,到开头
CSI n F 光标上移 n 行,到开头

CSI n G     光标移到第 n 列
CSI n;m H   光标移到第 n 行 m 列

CSI n J 擦除显示,0从光标到屏幕末尾,1从光标到屏幕开头,2全屏,3全屏并清空缓存
CSI n K 擦除行,0从光标到行末尾,1从光标到行开头,2整行。光标位置不变

CSI s 保存光标位置
CSI u 恢复光标位置

CSI n m 选择图形再现 (SGR), n 的取值范围是 0-107, 一类控制字符显示样式,另一类控制显示颜色
SGR参数列表:

    格式:\x9b显示方式;前景色;背景色m

    显示方式           意义
    -------------------------
    0                默认
    1                高亮
    4                下划线
    5                闪烁
    7                反显
    8                不可见
    9               删除线
    -------------------------
    21             关闭高亮
    22             正常颜色
    24             关闭下划线
    25             关闭闪烁
    27             关闭反显
    28             关闭隐藏
    29             关闭删除线


    前景色            背景色           颜色
    ---------------------------------------
    30                40              黑色
    31                41              红色
    32                42              绿色
    33                43              黃色
    34                44              蓝色
    35                45              紫红色
    36                46              青蓝色
    37                47              白色
    38                48              高级配置
    39                49              默认颜色

    例子:
    \x9b1;31;40m    1-高亮显示 31-红色前景  40-黑色背景
    \x9b0m          采用终端默认设置,即取消颜色设置

参考:https://blog.csdn.net/ScilogyHunter/article/details/106874395

    
在 Windows 的 cmd 和 powershell 终端,不支持 CSI,可以用 colorama 的 init() 解决:

    import colorama
    colorama.init()
"""



dic = {
    0: '默认', 
    1: "加粗或高亮",
    3: "斜体",
    4: "下划线",
    7: "反显",
    8: "不可见",
    9: "删除线",

    30: "黑色前景", 
    31: "红色前景", 
    32: "绿色前景", 
    33: "黃色前景", 
    34: "蓝色前景", 
    35: "紫红色前景", 
    36: "青蓝色前景", 
    37: "白色前景", 

    40: "黑色背景", 
    41: "红色背景", 
    42: "绿色背景", 
    43: "黃色背景", 
    44: "蓝色背景", 
    45: "紫红色背景", 
    46: "青蓝色背景", 
    47: "白色背景", 
}

for i in dic:
    info = dic[i]
    if not info:
        continue
    print(f'{i:>2d}: \x9b{i}m {info}  \x9b0m')



posted @ 2023-05-12 21:06  淳帅二代  阅读(358)  评论(0编辑  收藏  举报