一个Python print函数竟有这么多骚操作

举报
Python小二 发表于 2022/09/29 22:12:00 2022/09/29
【摘要】 正文 在终端中,输出的字体总是单一颜色的,黑底白字。但是在一些场景并不能很好的满足输出的需求,比如在大量而快速输出中,输出一些提示性或者警告性的信息,普通的黑底白字输出可能或起不到作用。 👉 Python 练手必备神器 👉 Python 爬虫实战必备神器 本文将介绍如何输出颜色字体到终端界面中。 # 1. A...

正文

在终端中,输出的字体总是单一颜色的,黑底白字。但是在一些场景并不能很好的满足输出的需求,比如在大量而快速输出中,输出一些提示性或者警告性的信息,普通的黑底白字输出可能或起不到作用。

👉 Python 练手必备神器

👉 Python 爬虫实战必备神器

本文将介绍如何输出颜色字体到终端界面中。

# 1. ANSI 转义序列

其实终端不仅能够显示程序的输出。它可以显示移动光标、为文本着色、清除整个屏幕,并且不仅仅是静态输出。比如颜色字体或者闪烁的光标或者是进度条。

我们通过使用特殊的输出字符串改变终端的输出行为,最简单的例子便是换行这个例子:\n

# 2. 配色方案

有两种配色方案广泛应用于终端中:

  • 16 色 (8 背景 + 8 前景)前景即是字体本身的颜色

  • 255 色

 16 色

16色的配色方案包含两个颜色设置,每个8色,一个是背景色一个是字体色(也即前景色),这个配色方案的语法格式如下:

53e2afd8bda9c6097ba28dc926850fb1.png

首先举一个例子 :

\033[1;32;40m

这里 \033[ 是转义字符 1 代表高亮,32 代表前景色为绿色,背景色为黑色

输出到终端则是这个效果:

20b209142b8857740dacbf6093b7de3c.png

转义字符

转义字符可以有三种形式

  • 十六进制:\x16[

  • Unicode:\u001b[

  • 八进制:\033[

样式

这个样式指的是字体的显示样式:

0(默认值)、1(高亮)、22(非粗体)

4(下划线)、24(非下划线)、 5(闪烁)

25(非闪烁)、7(反显)、27(非反显)


   
  1. print('\033[0;32;40m这是一行测试字体\033[0m')
  2. print('\033[1;32;40m这是一行测试字体\033[0m')
  3. print('\033[22;32;40m这是一行测试字体\033[0m')
  4. print('\033[4;32;40m这是一行测试字体\033[0m')
  5. print('\033[24;32;40m这是一行测试字体\033[0m')
  6. print('\033[5;32;40m这是一行测试字体\033[0m')
  7. print('\033[25;32;40m这是一行测试字体\033[0m')
  8. print('\033[7;32;40m这是一行测试字体\033[0m')
  9. print('\033[27;32;40m这是一行测试字体\033[0m')

具体效果看下面的动图:

3cc4d56e9bb33684034336554c9a5bfa.gif

需要注意的是具体的效果可能收到使用的终端的限制,目前在CMD中输出并不会被识别,但是在window terminal中是成功的输出以上内容。另外,搜索公众号顶级科技后台回复“API接口”,获取一份惊喜礼包。

颜色设置

前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)

前景色,即字体颜色的展示:


   
  1. print('\033[1;30;40m这是一行黑色测试字体\033[0m')
  2. print('\033[1;31;40m这是一行红色测试字体\033[0m')
  3. print('\033[1;32;40m这是一行绿色测试字体\033[0m')
  4. print('\033[1;33;40m这是一行黄色测试字体\033[0m')
  5. print('\033[1;34;40m这是一行蓝色测试字体\033[0m')
  6. print('\033[1;35;40m这是一行洋红测试字体\033[0m')
  7. print('\033[1;36;40m这是一行青色测试字体\033[0m')
  8. print('\033[1;37;40m这是一行白色测试字体\033[0m')

aeab231bc2cb7702d9f9675ed494aab7.png

背景色:


   
  1. print('\033[1;37;40m这是一行黑色测试背景\033[0m')
  2. print('\033[1;37;41m这是一行红色测试背景\033[0m')
  3. print('\033[1;37;42m这是一行绿色测试背景\033[0m')
  4. print('\033[1;37;43m这是一行黄色测试背景\033[0m')
  5. print('\033[1;37;44m这是一行蓝色测试背景\033[0m')
  6. print('\033[1;37;45m这是一行洋红测试背景\033[0m')
  7. print('\033[1;37;46m这是一行青色测试背景\033[0m')
  8. print('\033[1;37;47m这是一行白色测试背景\033[0m')

6d919abf9282d3cab7e1e75fc58f0a75.png

 Colorama 一个颜色输出的模块

每次输入输出都需要如此配置是非常麻烦的事,Colorama 提供方便的字体颜色输出的配置


   
  1. from colorama import init, Fore, Back, Style
  2. # Initializes Colorama
  3. init(autoreset=True)
  4. print(Style.BRIGHT + Back.YELLOW + Fore.RED + "from colorama import init, Fore, Back, Style
  5. # Initializes Colorama
  6. init(autoreset=True)
  7. print(Style.BRIGHT + Back.YELLOW + Fore.RED + "Colorama ")")

70b3728caaa340db089320dab4a4d524.png

 简单的变色函数


   
  1. background_color_dict={
  2.     'BLACK':40,
  3.     'RED':41,
  4.     'GREEN':42,
  5.     'YELLOW':43,
  6.     'BLUE':44,
  7.     'MAGENTA':45,
  8.     'CYAN':46,
  9.     'WHITE':47
  10. }
  11. text_color_dict={
  12.     'BLACK':30,
  13.     'RED':31,
  14.     'GREEN':32,
  15.     'YELLOW':33,
  16.     'BLUE':34,
  17.     'MAGENTA':35,
  18.     'CYAN':36,
  19.     'WHITE':37
  20. }
  21. style_dict={
  22.     'normal':0,
  23.     'bold':1,
  24.     'light':2,
  25.     'italicize':3,
  26.     'underline':4,
  27.     'blink':5
  28. }
  29. def set_text_color(str_text, style, text_color, background_color):
  30.     str = str_text
  31.     style_code = style_dict[style]
  32.     text_color_code = text_color_dict[text_color]
  33.     back_color_code = background_color_dict[background_color]
  34.     print_text = f'\033[{style_code};{text_color_code};{back_color_code}m{str}\033[0m'
  35.     return print_text

 256色

256色的输出格式和16色的有点不一样

eec94d7bd8b793807ca9d5d8baebb696.png

转义字符和上面的是一样的:

  • 十六进制:\x16[

  • Unicode:\u001b[

  • 八进制:\033[

标注显示模式则是38或者48选择一个表名后面颜色代码是前景色还是背景色。

如果想要同时修改,则使用两个这样的语句即可:

print("\033[48;5;160m\033[38;5;231m背景前景修改ABCDE \033[38;5;226m前景修改ABCDE\033[0;0m")
  

071422a63b7a216f40953037a3f1dcb6.png

输出一下所有的前景颜色


   
  1. def print_colors_256(color_code):
  2.     num1 = str(color_code)
  3.     num2 = str(color_code).ljust(3' ')
  4.     if color_code % 16 == 0:
  5.         return(f"\033[38;5;{num1}m {num2} \033[0;0m\n")
  6.     else:
  7.         return(f"\033[38;5;{num1}m {num2} \033[0;0m")
  8. print("256 color scheme:")
  9. print('',end=' ')
  10. print(' '.join([print_colors_256(x) for x in range(256)]))

9bd716a337bad570191f90c395a20517.png

这个效果可能和你的终端输出不一致,这可能是因为我们的终端使用了不同的主题,对颜色有着不同的修改。

文章来源: ityard.blog.csdn.net,作者:Python小二,版权归原作者所有,如需转载,请联系作者。

原文链接:ityard.blog.csdn.net/article/details/127063877

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。