101 votes

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

Est-il possible d'une manière ou d'une autre de faire apparaître une certaine sortie dans une couleur différente dans le carnet IPython? Par exemple, quelque chose dans ce genre:

 print("Bonjour monde en rouge", color='red')

3voto

Alex Points 335

Une bonne façon d'utiliser pandas est:

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)

Résultat de l'exemple: description de l'image

2voto

Roei Bahumi Points 361

En utilisant la réponse de @Evert, voici une méthode qui envelopperait une liste de jetons en rouge et renverrait une chaîne en surbrillance

def color_in_tokens(tokens, color_token_contains="_"):
  """
  Met en surbrillance les jetons contenant 'color_token_contains'

  :param tokens: liste de chaînes
  :param color_token_contains: str (la chaîne pour marquer un jeton en rouge)
  :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 retournée: description de l'image

1voto

Carlos B Points 311

Extrait de : Norme pour les couleurs ANSI dans les terminaux

Ce fragment de code peut vous montrer toutes les couleurs sur une seule ligne :

RÉINITIALISER = "\x1b[0m"
print("Pour réinitialiser les attributs : \\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))

0voto

Brian Points 37

Comme suggéré, le comportement exact que vous demandez peut être obtenu en enveloppant la fonction print() de la manière suivante :

def print_wrapper(func):
    ansi_reset = '\033[0m'
    ansi_black = '\033[90m'
    ansi_red = '\033[91m'
    ansi_green = '\033[92m'
    ansi_yellow = '\033[93m'
    ansi_blue = '\033[94m'
    ansi_pink = '\033[95m'
    ansi_teal = '\033[96m'
    ansi_gray = '\033[97m'
    ansi_warning = '\033[31;1;4m'
    ansi_error = '\033[31;100m'
    def wrapped_func(*args,**kwargs):
        new_args = args + tuple()
        new_kwargs = kwargs.copy()
        for kwarg, kwvalue in kwargs.items(): # Loop through the keyword arguments
            if kwarg == "color":
                if kwvalue == "black":
                    color = ansi_black
                elif kwvalue == "red":
                    color = ansi_red
                elif kwvalue == "green":
                    color = ansi_green
                elif kwvalue == "yellow":
                    color = ansi_yellow
                elif kwvalue == "blue":
                    color = ansi_blue
                elif kwvalue == "pink":
                    color = ansi_pink
                elif kwvalue == "teal":
                    color = ansi_teal
                elif kwvalue == "gray":
                    color = ansi_gray
                elif kwvalue == "warning":
                    color = ansi_warning
                elif kwvalue == "error":
                    color = ansi_error
                new_kwargs = kwargs.copy() # Make a copy of the keyword arguments dict
                del new_kwargs["color"] # Remove color from the keyword arguments dict
        try: # Is the variable color defined?
            color
        except NameError:
            pass
            # no color was specified
        else:
            new_args = ()
            for arg in args:
                new_args += (f"{color}{arg}{ansi_reset}",) # Apply the ANSI escape codes to each non-keyword argument
        return func(*new_args,**new_kwargs)
    return wrapped_func

print = print_wrapper(print) # Apply the wrapper to the print() function

print("This is red.", "And so is this.", color='red')

Cette solution utilise les séquences d'échappement ANSI mentionnées dans plusieurs autres réponses ici, mais analyse et modifie les arguments de print() avant de les afficher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X