如何在Python中打印彩色文本?

22

我是一名新手,既不懂Python也不熟悉StackOverflow,希望能得到一些帮助。我想在Python中打印彩色文字,但是在Google上搜索了很久,没有找到合适的方法。每次尝试都让我感到困惑,并且都没有成功。

这是我输入的代码:

answer = input ("Wanna go explore? OPTIONS : Yes or No")
if answer == "no":
    print("Awww, come on, don't be like that, lets go!")
elif answer == "yes":
    print ("Great! Lets go!")
else: 
    print("Whats that? I couldn't hear you!")

现在,我想要将OPTIONS标记为绿色,Yes标记为蓝色,No标记为红色。如何实现这个效果?

你的代码缺少缩进并且语法无效。你应该先修复它。另外,我不理解你的需求。什么样的输入会导致什么样的输出? - phihag
我已经修复了你代码的语法。 - SomeKittens
@PaulSeeb:声望较低的用户无法获得太多的编辑权限,他们需要经过审核。 - jdi
请不要这样做。让用户选择最舒适的显示颜色。 - StingyJack
2
可能是如何在Python终端中打印彩色文本?的重复问题。 - Nazim Kerimbekov
显示剩余2条评论
8个回答

9
如果你想要在IDLE shell中打印颜色,使用ASCII转义码是无法帮助你的,因为它不支持这个功能。
对于IDLE有一个特定的黑客方法,可以直接写入它的PyShell对象并指定文本标签,IDLE已经定义了这些标签,例如"STRING",默认情况下将显示为绿色。
import sys

try:
    shell = sys.stdout.shell
except AttributeError:
    raise RuntimeError("you must run this program in IDLE")

shell.write("Wanna go explore? ","KEYWORD")
shell.write("OPTIONS","STRING")
shell.write(" : ","KEYWORD")
shell.write("Yes","DEFINITION")
shell.write(" or ","KEYWORD")
shell.write("No","COMMENT")
answer = input()

在IDLE中运行将导致这个提示: enter image description here 以下是所有可用标签的列表:
print("here are all the valid tags:\n")

valid_tags = ('SYNC', 'stdin', 'BUILTIN', 'STRING', 'console', 'COMMENT', 'stdout',
              'TODO','stderr', 'hit', 'DEFINITION', 'KEYWORD', 'ERROR', 'sel')

for tag in valid_tags:
    shell.write(tag+"\n",tag)

请注意,'sel' 是一个特殊的符号,它代表被选择的文本,因此一旦点击其他内容,它就会取消选择。同时,它也可以用于将某些文本标记为选定状态以便复制。

我可以用它打印粗体文本吗? - user8167727
这仅限于IDLE如何着色其文本,据我所知,它只能采用首选项中设置的颜色方案(而不是文本大小/粗体/字体等)。 - Tadhg McDonald-Jensen

8
如果你只是想在终端中简单明了地打印ansi颜色,你可以查看ansicolor 包模块

通过pip安装

$ pip install ansicolors

使用示例

from colors import red, green, blue
print red('This is red')
print green('This is green')
print blue('This is blue')

from colors import color
for i in range(256):
    print color('Color #%d' % i, fg=i)

pip的说明

pip是一个Python包管理器。如果你没有安装pip,可以使用easy_install pip进行安装。

如果你发现没有安装easy_install,那么请下载http://peak.telecommunity.com/dist/ez_setup.py并执行以下操作:

python ez_setup.py
easy_install pip

Windows命令行的颜色

上述的ANSI颜色在Windows命令行中无法使用。尝试查看这个ActiveState代码片段


我会检查一下,并回来报告结果。非常感谢! - Zex Xus
啊,不行啊。我试着通过输入 $ pip install ansicolors 来安装,可能我需要安装这个“pip”,我以前从没听说过pip :P - Zex Xus
pip 是 Python 的包管理器。如果您还没有安装它,首先尝试使用命令 easy_install pip 进行安装。 - jdi
@ZexXus:我刚看到你在使用Windows。那么这个对你来说是无用的。Windows命令提示符不支持打印ANSI颜色。 - jdi
@ZexXus;我刚刚添加了一个链接来帮助你。 - jdi

8

Python中的颜色

一种简单的方法,可以在Python中漂亮地打印文本或样式化文本,无需任何插件或包。


# the ANSI codes are stored in variables, making them easier to use
black = "\033[0;30m"
red = "\033[0;31m"
green = "\033[0;32m"
yellow = "\033[0;33m"
blue = "\033[0;34m"
magenta = "\033[0;35m"
cyan = "\033[0;36m"
white = "\033[0;37m"
bright_black = "\033[0;90m"
bright_red = "\033[0;91m"
bright_green = "\033[0;92m"
bright_yellow = "\033[0;93m"
bright_blue = "\033[0;94m"
bright_magenta = "\033[0;95m"
bright_cyan = "\033[0;96m"
bright_white = "\033[0;97m"

print(black + "Hello world")
print(red + "Hello world")
print(green + "Hello world")
print(blue + "Hello world")
print(yellow + "Hello world")
print(magenta + "Hello world")
print(cyan + "Hello world")
print(bright_black + "Hello world")
print(bright_red + "Hello world")
print(bright_green + "Hello world")
print(bright_blue + "Hello world")
print(bright_cyan + "Hello world")
print(bright_magenta + "Hello world")
print(bright_yellow + "Hello world")

输出 :

查看:彩色输出


Windows不理解ANSI码。例如,当我在Windows上运行第一个Hello World程序时,屏幕会输出[0;30mHello world - hostingutilities.com
你可能正在Python shell中执行代码,但我认为它只能在终端或编辑器中运行,而不能在shell中运行。 - Hritik Jaiswal
首先使用 os.system('color') 命令在终端中打印颜色。 - Mujtaba
1
@hostingutilities 当然,Windows命令提示符不理解ANSI代码,但如果你使用Windows终端(本身就很棒)或PowerShell或几乎任何现代终端 - 那里都有颜色。 - Goujon

7
如果您正在使用支持ANSI转义序列的终端和/或shell,可以尝试以下操作:
print("Blah blah \033[0;32mthis part will be green\033[00m blah blah.")
print("Blah blah \033[0;31mthis part will be red\033[00m blah blah.")

我可以确认在Linux的bash中它是可用的。请参考Wikipedia关于ANSI转义码的页面,其中包括详细的表格,描述了不同字符序列/值的影响。 我并不主张这是一个标准解决方案,但对您的目的可能已足够。


5

请查看curses模块。它可以替代print语句,并使您完全控制屏幕上的文本位置和属性。


3

ClintCommand Line INterface Tools)是我使用过的很好的库。它是一个多功能库,用于与终端相关的任何事情。其中包括颜色、是/否提示、进度条等功能。

使用Clint进行彩色输出的方法如下:

>>> from clint.textui import colored, puts
>>> puts(colored.red('red text'))
red text

2
我建议使用这个新的库Printy,它提供了print()和input()的替代函数。最新版本1.2.0是跨平台库。它基于标志(flag)实现,所以你可以按照以下方式使用:
from printy import inputy
# with inline formats, this will apply a green(n)
# to the word 'OPTIONS', blue (b) to the word 'Yes', and red (r) to 
# the word No
inputy("Wanna go explore? [n]OPTIONS@ : [b]Yes@ or [r]No@")

在此输入图像描述

您还可以应用一些验证,返回值已转换为布尔值(或根据指定类型)

在此输入图像描述

它让您可以做更有趣的事情,请查看:Printy on github


1
谢谢。Printy是一个很棒的库。我已经寻找了几个月这样的模块。 - math scat

0

如果你想在终端打印彩色文字,你需要使用对应终端的转义代码。在 Unix/Linux 系统中,你可以使用 curses 模块,或者直接将 bash 颜色代码 添加到输出字符串中。根据 this question 的说法,在 Windows 中似乎没有简单的方法来实现这一功能。


那我必须使用Linux?该死。我更喜欢Windows :( (并不是说Linux不好)嗯,算了。 - Zex Xus
1
你可以使用cygwin,它基本上为Windows平台提供了Linux shell和程序。无论如何,我建议在Windows下进行编程时使用它,因为与bash相比,cmd shell太糟糕了。 - l4mpi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接