Как менять цвет текста в python

Как менять цвет текста в python

Для изменения цвета текста чаще всего используют управляющие коды ANSI. Например, чтобы вывести красный текст, достаточно использовать строку ‘\033[31mТекст\033[0m’, где 31 – код красного цвета, а 0 – сброс форматирования. Это работает в терминалах Linux, macOS и большинстве эмуляторов консоли Windows 10+.

В кроссплатформенных проектах рекомендуется использовать библиотеку colorama, которая обеспечивает поддержку ANSI-кодов в Windows. После вызова init() можно использовать константы, такие как Fore.RED, без необходимости вручную прописывать escape-последовательности.

Для более гибкого управления цветами и стилями подойдёт библиотека rich. Она поддерживает не только цвета, но и стили, таблицы и даже Markdown. Команда print(«[bold green]Успех[/]») выведет текст зелёным цветом с жирным начертанием.

Важно учитывать поддержку ANSI-цветов в используемой среде. Некоторые среды IDE, например IDLE или старые версии Windows CMD, могут игнорировать управляющие последовательности. Для таких случаев можно использовать GUI-библиотеки, например tkinter или PyQt, для отображения цветного текста в графическом интерфейсе.

Как изменить цвет текста в терминале с помощью ANSI-кодов

Как изменить цвет текста в терминале с помощью ANSI-кодов

ANSI-коды позволяют задавать цвет текста в терминале с помощью управляющих последовательностей. Они начинаются с символа ESC (код \033) и включают параметры, разделённые точкой с запятой, за которыми следует буква m.

Формат кода: \033[Параметрыm. Например, \033[31m – красный цвет текста.

Ниже приведены основные параметры для изменения цвета текста:

Код Описание
30 Чёрный
31 Красный
32 Зелёный
33 Жёлтый
34 Синий
35 Пурпурный
36 Голубой
37 Белый
0 Сброс стиля
print("\033[32mЗелёный текст\033[0m")

Комбинации можно усиливать. Например, \033[1;31m задаёт яркий красный, где 1 – параметр интенсивности.

Для фона используются коды от 40 до 47. Пример красного текста на жёлтом фоне:

print("\033[31;43mКрасный на жёлтом\033[0m")

Применение библиотеки colorama для окраски текста

Библиотека colorama предоставляет простой способ изменения цвета текста и фона в терминале Windows, а также на Unix-системах. Для начала требуется установка через pip install colorama.

После установки необходимо выполнить инициализацию с помощью init(). Это активирует поддержку ANSI-кодов на Windows:

from colorama import init, Fore, Back, Style
init()

Для изменения цвета текста используются константы из модуля Fore. Например, Fore.RED делает текст красным:

print(Fore.RED + "Ошибка: доступ запрещён")

Чтобы задать цвет фона, применяются значения из Back. Пример с жёлтым фоном:

print(Back.YELLOW + "Внимание!")

Для сброса всех стилей используется Style.RESET_ALL. Это необходимо для предотвращения наследования цвета следующими строками:

print(Fore.GREEN + "Готово" + Style.RESET_ALL)

Также доступны стили текста: Style.DIM, Style.NORMAL и Style.BRIGHT. Например, яркий синий текст:

print(Style.BRIGHT + Fore.BLUE + "Информация")

Colorama не изменяет стандартные функции Python, поэтому все изменения применяются только при явном указании стиля и не сохраняются между вызовами, если не указать иное. Рекомендуется всегда сбрасывать стиль вручную, чтобы избежать неожиданных эффектов отображения.

Библиотека termcolor предоставляет простой способ раскрасить текст в терминале без необходимости вручную управлять ANSI-кодами. Установка производится через pip:

pip install termcolor

Основная функция – colored(), которая принимает строку и параметры форматирования:

from termcolor import colored
print(colored("Пример текста", color="green", on_color="on_red", attrs=["bold"]))

Поддерживаются следующие параметры:

  • color: ‘grey’, ‘red’, ‘green’, ‘yellow’, ‘blue’, ‘magenta’, ‘cyan’, ‘white’
  • on_color: ‘on_grey’, ‘on_red’, ‘on_green’, ‘on_yellow’, ‘on_blue’, ‘on_magenta’, ‘on_cyan’, ‘on_white’
  • attrs: ‘bold’, ‘dark’, ‘underline’, ‘blink’, ‘reverse’, ‘concealed’

Пример применения всех параметров:

print(colored("Уведомление", color="yellow", on_color="on_blue", attrs=["underline"]))

Если необходимо часто применять одинаковые параметры, создайте вспомогательную функцию:

def info(text):
return colored(text, color="cyan", attrs=["bold"])
print(info("Системное сообщение"))

termcolor не работает в Windows без поддержки ANSI. Для корректного отображения на этой платформе рекомендуется использовать совместно с colorama:

from colorama import init
init()

Поддержка вложенного форматирования отсутствует. Каждый вызов colored() форматирует одну строку. Для форматирования нескольких частей текста – объединяйте их вручную:

print(colored("Внимание:", "red") + " " + colored("Ошибка доступа", "yellow"))

Сравнение методов окрашивания текста в командной строке Windows и Linux

Окрашивание текста в Python реализуется по-разному в зависимости от операционной системы. В Windows консоль по умолчанию не поддерживает ANSI escape-коды, в отличие от Linux. Это требует использования разных подходов и библиотек.

  • В Linux ANSI escape-коды работают «из коробки», что позволяет использовать их напрямую без сторонних библиотек.

Пример с ANSI-кодами, подходящий только для Linux (или Windows с включённой поддержкой):

print("\033[91mКрасный текст\033[0m")

На Windows этот код без инициализации colorama не даст цвет. Используйте:


from colorama import init, Fore
init()
print(Fore.RED + 'Красный текст')
  • colorama автоматически преобразует ANSI-последовательности в Windows API-вызовы, обеспечивая совместимость.
  • termcolor и colored опираются на ANSI, поэтому требуют colorama для корректной работы в Windows.
  • Для кроссплатформенного кода – всегда используйте colorama.init() в начале программы.
  1. На Linux предпочтительно использовать ANSI напрямую – меньше зависимостей и выше производительность.
  2. На Windows – использовать colorama или взаимодействовать с консолью через ctypes для низкоуровневого управления (сложнее, но гибче).

Изменение цвета текста в Jupyter Notebook

Изменение цвета текста в Jupyter Notebook

В Jupyter Notebook можно изменять цвет текста с помощью HTML и Markdown. Ячейки типа Markdown поддерживают HTML-теги, что позволяет напрямую управлять стилями текста.

Для задания цвета используйте тег <span> с атрибутом style. Пример:

<span style="color: red;">Этот текст будет красным</span>

Цвет можно задавать по названию (red, blue, green) или в формате HEX и RGB:

<span style="color: #228B22;">Зелёный текст (HEX)</span>

<span style="color: rgb(0, 128, 255);">Синий текст (RGB)</span>

Также можно комбинировать цвет с другими свойствами, например, размером шрифта:

<span style="color: orange; font-size: 18px;">Оранжевый текст крупного размера</span>

from IPython.display import HTML, display
display(HTML('<span style="color: purple;">Фиолетовый текст из ячейки кода</span>'))

Эти методы позволяют точно контролировать визуальное оформление текста без сторонних библиотек.

Окрашивание текста в логах с использованием logging и colorlog

Окрашивание текста в логах с использованием logging и colorlog

Установка colorlog производится через pip:

pip install colorlog

После установки можно настроить окрашивание сообщений в зависимости от их уровня. Пример конфигурации логгера с использованием colorlog:

import logging
import colorlog
# Создаем объект логгера
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
# Настройка формата логов с цветом
formatter = colorlog.ColoredFormatter(
'%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
log_colors={
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'bold_red',
}
)
# Создание консольного обработчика
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
# Добавление обработчика в логгер
logger.addHandler(console_handler)
# Пример логирования с разными уровнями
logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

В приведенном примере создается кастомный логгер, который отображает различные уровни сообщений в разных цветах. Важно настроить словарь log_colors, где для каждого уровня можно задать свой цвет. В примере использованы стандартные цвета, такие как cyan, green, yellow, red и bold_red.

print("\033[31mОшибка: файл не найден\033[0m")
print("\033[33mПредупреждение: возможные проблемы с подключением\033[0m")

В более сложных проектах лучше использовать библиотеки для работы с цветом, такие как colorama или termcolor. Эти библиотеки обеспечивают кроссплатформенную совместимость и упрощают работу с цветами.

Пример с использованием colorama:

from colorama import Fore, init
init(autoreset=True)
print(Fore.RED + "Ошибка: не удалось подключиться к базе данных")
print(Fore.YELLOW + "Предупреждение: низкий уровень памяти")

Для более гибкого подхода можно комбинировать цвета с форматированием, например, использовать жирный или подчеркивающий текст для выделения важнейших сообщений. Важно, чтобы цвета не были слишком яркими или агрессивными, что может отвлекать внимание.

Создание собственной функции для окрашивания текста с параметрами

Создание собственной функции для окрашивания текста с параметрами

Ниже приведен пример функции, которая позволяет задавать цвет текста с помощью параметров:

def color_text(text, color='green'):
colors = {
'black': '\033[30m',
'red': '\033[31m',
'green': '\033[32m',
'yellow': '\033[33m',
'blue': '\033[34m',
'magenta': '\033[35m',
'cyan': '\033[36m',
'white': '\033[37m'
}
reset = '\033[39m'  # сброс цвета
if color not in colors:
raise ValueError(f"Неверный цвет: {color}. Доступные цвета: {', '.join(colors.keys())}")
return f"{colors[color]}{text}{reset}"

Функция color_text принимает два параметра: текст и цвет. Если цвет не указан, по умолчанию используется зеленый. В словаре colors содержатся ANSI escape-коды для разных цветов. Эти коды используются для изменения цвета текста в терминале. В конце каждого возвращаемого текста добавляется код reset, который сбрасывает цвет обратно к стандартному.

Пример использования:

print(color_text("Это красный текст!", "red"))
print(color_text("Это синий текст!"))

Вопрос-ответ:

Ссылка на основную публикацию