75

是否有可能在 IPython Notebook 中以不同的颜色显示某些输出?例如,类似于以下内容:

 print("Hello Red World", color='red')
4

13 回答 13

77

笔记本当然有自己的语法高亮。所以在其他地方使用颜色时我会小心,以免让自己或其他人更难阅读(例如,输出应该只是黑色,但如果有例外,你会得到红色的部分)。

但是(令我惊讶的是),您似乎可以使用 ANSI 转义码(甚至在浏览器中)。至少,我可以:

在默认 Python 提示符下:

>>> print("\x1b[31m\"red\"\x1b[0m")
"red"

在笔记本中:

In [28]: print("\x1b[31m\"red\"\x1b[0m")
         "red"

(显然,我在这里用 SO 的语法突出显示作弊,以便在两个示例中都以红色打印“红色”。我认为 SO 不允许用户为文本设置颜色。)

我真的不知道另一种获得颜色的方法。

有关 ANSI 转义码的更多信息,我建议阅读 Wikipedia 文章。如果你发现上面的内容很冗长,你当然可以围绕它编写一个包装函数。

于 2013-05-29T14:38:31.457 回答
50

您可以使用这个库termcolor并且可以在 PyPi 中获取所有其他官方 python 库。

  1. pip install termcolor
  2. 然后转到ipython

代码

from termcolor import colored
print(colored('hello', 'red'), colored('world', 'green'))
print(colored("hello red world", 'red'))

输出:

hello world
hello red world

第一个参数是您要在控制台上打印的内容,第二个参数使用该颜色。

pypi.python.org有关更多信息,请参阅文档

于 2017-03-02T09:36:43.717 回答
32

这是一个快速破解:

from IPython.display import HTML as html_print

def cstr(s, color='black'):
    return "<text style=color:{}>{}</text>".format(color, s)

left, word, right = 'foo' , 'abc' , 'bar'
html_print(cstr(' '.join([left, cstr(word, color='red'), right]), color='black') )

[出去]:

在此处输入图像描述

如果你只想要一种颜色:html_print(cstr('abc', 'red'))

于 2017-03-01T14:52:49.727 回答
30

类似于@alvas 提到的但更简单

from IPython.display import Markdown
display (Markdown('this is in <span style="color: #ff0000">red</span> color.'))
于 2018-07-28T12:26:10.373 回答
14

不适用于原始 Python 打印。您必须_repr_html_在对象上定义 a 并返回它或调用IPython.lib.display(object_with_repr_html)

我想你可以覆盖内置的打印来自动完成......

您可以从http://nbviewer.ipython.org/5098827、github上的 gist 中的代码以及此处的ML 讨论中获得启发。

于 2013-05-29T14:37:54.757 回答
14

在 Jupiter notebook 中,我们可以使用颜色标记以不同的颜色打印输出。我们可以通过三种方式使用颜色标记。

让我们看看如何在笔记本上打印黄色。

  1. print('\033[93m output')
  2. print('\033[93m' 'output')
  3. print('\033[93m' + 'output')

一些颜色是:

  • 黄色 = '\033[93m'
  • 绿色 = '\033[92m'
  • 红色 = '\033[91m'
  • 蓝色 = '\033[94m'
  • 粉红色 = '\033[95m'

您可以更改最后一个数字并获得其他颜色。

在此处输入图像描述

于 2020-09-23T03:23:51.763 回答
8

彩色库( pip install colored),您可以使用它来修改字符串以获取颜色代码以修改其打印方式。示例使用:

import colored
print(colored.bg("white") + colored.fg("red") + "Hello world!")
于 2019-01-06T20:08:04.137 回答
2

colorama让它变得容易:

from colorama import Fore
print(Fore.RED + "this is red")
于 2019-09-19T02:13:24.340 回答
2

感谢@alvas 函数并添加了另一个函数,我们得到了一种非常简单的打印方式

from IPython.display import HTML as html_print
from IPython.display import display

def cstr(s, color='black'):
    return "<text style=color:{}>{}</text>".format(color, s)

def print_color(t):
    display(html_print(' '.join([cstr(ti, color=ci) for ti,ci in t])))

print_color((('hello my name is', 'black'),('jhjfd','red')))
print_color((('hello my name is', 'green'),))

在此处输入图像描述

于 2019-11-15T08:45:34.840 回答
2

红色文字:

print("\x1b[31mText in red")

粗体字:

print("\x1B[1mText in bold")

下划线中的文字

print("\x1B[4mText in underline")

请参阅样式和颜色一章下的此处,看看什么适合您。RGB 颜色对我不起作用。

于 2020-01-05T10:16:30.117 回答
1

使用@Evert 答案,这里有一个方法可以用红色包装一个标记列表并返回一个突出显示的字符串

def color_in_tokens(tokens, color_token_contains="_"):
  """
  Highlights the tokens which contain 'color_token_contains'

  :param tokens: list of strings
  :param color_token_contains: str (the string for marking a token red)
  :return: str
  """
  return " ".join(["\x1b[31m%s\x1b[0m" % i if color_token_contains in i else i for i in tokens])

只需在返回的字符串上调用 print : 在此处输入图像描述

于 2017-11-28T09:47:49.350 回答
0

取自:端子中的 ANSI 颜色标准

此代码段可以在一行中显示所有颜色:

RESET = "\x1b[0m"
print("To reset attributes: \\x1b[0m\n")
for i in range(0, 8):
    print("\x1b[1;3{0}m\\x1b[1;3{0}m{1} \x1b[0;3{0}m\\x1b[0;3{0}m{1} "
          "\x1b[1;4{0};3{0}m\\x1b[1;3{0};4{0}m{1}".format(i, RESET))
于 2020-02-05T11:21:22.940 回答
0

一个不错的方法是使用pandas

import pandas as pd
def apply_formatting(col, hex_colors):
    for hex_color in hex_colors:
        if col.name == hex_color:
            return [f'background-color: {hex_color}' for c in col.values]
                
def display_hex_colors(hex_colors: List[str]):
    df = pd.DataFrame(hex_colors).T
    df.columns = hex_colors
    df.iloc[0,0:len(hex_colors)] = ""
    display(df.style.apply(lambda x: apply_formatting(x, hex_colors)))
hex_list = ['#FFFFFF', '#F0F0F0', '#FCF0D8', '#fdd8a7', '#fdc38d', '#fca16c',
            '#f67b51', '#e7533a', '#cf2518', '#ad0000', '#7f0000', '#440402']
display_hex_colors(hex_list)

示例输出: 在此处输入图像描述

于 2021-08-19T09:16:53.713 回答