web-dev-qa-db-fra.com

Est-il possible d'imprimer en utilisant différentes couleurs dans ipython Notebook?

Est-il possible que certaines sorties apparaissent dans une couleur différente dans le Notebook IPython?

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

Le bloc-notes a bien sûr sa propre syntaxe en surbrillance. Je ferais donc bien attention lorsque j'utilise de la couleur ailleurs, afin d'éviter de compliquer la lecture pour vous-même ou pour quelqu'un d'autre (par exemple, la sortie doit simplement être en noir, mais vous obtenez des parties en rouge en cas d'exception).

Mais (à ma grande surprise), il semble que vous puissiez utiliser les codes d'échappement ANSI (même dans le navigateur). Au moins, je pourrais:

Sur l'invite Python par défaut:

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

Dans le cahier:

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

(Évidemment, j'ai triché ici avec la coloration syntaxique de SO pour que "rouge" soit imprimé en rouge dans les deux exemples. Je ne pense pas que SO autorise un utilisateur à définir une couleur pour le texte .)

Je ne saurais pas vraiment une autre façon d'obtenir des couleurs.

Pour plus d'informations sur les codes d'échappement ANSI, je suggérerais le article Wikipedia . Et si vous trouvez que ce qui précède est prolixe, vous pouvez bien sûr écrire une fonction wrapper autour de cela.

46
user707650

vous pouvez utiliser cette bibliothèque termcolor et vous pouvez obtenir toutes les autres bibliothèques officielles de python en pypi

Voir la documentation dans pypi.python.org ou suivez ces étapes

  1. pip installer termcolor
  2. puis allez à ipython

Code

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

Sortie:

hello world
hello red world

Le premier argument est ce que vous voulez imprimer sur la console et le second argument utilise cette couleur

13
anand tripathi

Pas avec une impression Python brute. Vous devrez définir un _repr_html_ sur un objet et le renvoyer ou appeler IPython.lib.display(object_with_repr_html)

Je suppose que vous pourriez écraser l'impression intégrée pour le faire automatiquement ...

Vous pouvez vous inspirer de http://nbviewer.ipython.org/5098827 , code dans Gist sur github , discussion ML ici .

12
Matt

Voici un petit hack:

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') )

[en dehors]:

 enter image description here

Si vous voulez juste une seule couleur: html_print(cstr('abc', 'red')) 

10
alvas

Semblable à ce que @alvas a mentionné mais plus simple

from IPython.display import Markdown
display (Markdown('this is in <span style="color: #ff0000">red</span> color.'))
4
Kourosh Meshgi

Il existe la bibliothèque colorée (pip install colored), que vous pouvez utiliser pour modifier une chaîne afin d’obtenir des codes de couleur afin de modifier son impression. Exemple d'utilisation:

import colored
print colored.bg("white") + colored.fg("red") + "Hello world!"
0
Zags

En utilisant @Evert answer, voici une méthode qui encapsulerait une liste de jetons en rouge et renverrait une chaîne en surbrillance

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])

Il suffit d'appeler print sur la chaîne renvoyée:  enter image description here

0
Roei Bahumi