是否有可能在 IPython Notebook 中以不同的颜色显示某些输出?例如,类似于以下内容:
print("Hello Red World", color='red')
是否有可能在 IPython Notebook 中以不同的颜色显示某些输出?例如,类似于以下内容:
print("Hello Red World", color='red')
笔记本当然有自己的语法高亮。所以在其他地方使用颜色时我会小心,以免让自己或其他人更难阅读(例如,输出应该只是黑色,但如果有例外,你会得到红色的部分)。
但是(令我惊讶的是),您似乎可以使用 ANSI 转义码(甚至在浏览器中)。至少,我可以:
在默认 Python 提示符下:
>>> print("\x1b[31m\"red\"\x1b[0m")
"red"
在笔记本中:
In [28]: print("\x1b[31m\"red\"\x1b[0m")
"red"
(显然,我在这里用 SO 的语法突出显示作弊,以便在两个示例中都以红色打印“红色”。我认为 SO 不允许用户为文本设置颜色。)
我真的不知道另一种获得颜色的方法。
有关 ANSI 转义码的更多信息,我建议阅读 Wikipedia 文章。如果你发现上面的内容很冗长,你当然可以围绕它编写一个包装函数。
您可以使用这个库termcolor并且可以在 PyPi 中获取所有其他官方 python 库。
pip install termcolor
- 然后转到
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
有关更多信息,请参阅文档
这是一个快速破解:
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'))
类似于@alvas 提到的但更简单
from IPython.display import Markdown
display (Markdown('this is in <span style="color: #ff0000">red</span> color.'))
不适用于原始 Python 打印。您必须_repr_html_
在对象上定义 a 并返回它或调用IPython.lib.display(object_with_repr_html)
。
我想你可以覆盖内置的打印来自动完成......
您可以从http://nbviewer.ipython.org/5098827、github上的 gist 中的代码以及此处的ML 讨论中获得启发。
有彩色库( pip install colored
),您可以使用它来修改字符串以获取颜色代码以修改其打印方式。示例使用:
import colored
print(colored.bg("white") + colored.fg("red") + "Hello world!")
colorama
让它变得容易:
from colorama import Fore
print(Fore.RED + "this is red")
感谢@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'),))
红色文字:
print("\x1b[31mText in red")
粗体字:
print("\x1B[1mText in bold")
下划线中的文字
print("\x1B[4mText in underline")
请参阅样式和颜色一章下的此处,看看什么适合您。RGB 颜色对我不起作用。
使用@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])
此代码段可以在一行中显示所有颜色:
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))
一个不错的方法是使用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)