Раскрашивание консольного вывода: от простых ANSI до Rich
Основные способы цветного вывода в Python
Цветной вывод помогает визуально разделять логи, делать интерфейсы нагляднее. В Python есть несколько подходов: от низкоуровневых ANSI-кодов до мощных библиотек. Рассмотрим их.
Как организовать цветной вывод кроссплатформенно?
Наиболее эффективное решение — библиотека colorama. Она обрабатывает ANSI-коды на Windows и автоматически сбрасывает стили.
Установка: pip install colorama.
from colorama import init, Fore, Back, Style
init() # инициализация для Windows
print(Fore.RED + 'Красный текст' + Style.RESET_ALL)
print(Back.GREEN + 'Зелёный фон' + Style.RESET_ALL)
print(Fore.BLUE + Back.YELLOW + 'Синий на жёлтом' + Style.RESET_ALL)
ввод программ на python (ввод данных в программе python)
Красный текст (красным цветом) Зелёный фон (с зелёным фоном) Синий на жёлтом (синий текст на жёлтом фоне)
Python file io (ввод-вывод файлов в python)
Проблема: на старых Windows может потребоваться init(autoreset=True) для автоматического сброса.
Типичная ошибка: забыть вызвать init() или не сбросить стиль Style.RESET_ALL. Это приводит к тому, что весь последующий вывод терминала остаётся окрашенным. Решение: использовать auto-reset или всегда завершать строку сбросом.
Как вывести цветной текст без библиотек?
Используются ANSI escape-последовательности напрямую. Они работают в большинстве современных терминалов (Linux, macOS, Windows Terminal).
RED = '\033[31m'
GREEN = '\033[32m'
RESET = '\033[0m'
print(RED + 'Красный' + RESET)
print(GREEN + 'Зелёный' + RESET)
Python temp files (временные файлы в python)
Красный (красный) Зелёный (зелёный)
Python index files (индексация файлов в python)
Проблема: на старых командных строках Windows (cmd) ANSI-коды не работают без дополнительной настройки. Решение: установить colorama или использовать Windows Terminal.
Как упростить цветной вывод с помощью termcolor?
Библиотека termcolor предоставляет функцию colored() с удобными параметрами.
Установка: pip install termcolor.
from termcolor import colored
print(colored('Привет', 'red', 'on_green', attrs=['bold', 'underline']))
File python class (класс для работы с файлами в python)
Привет (жирный подчёркнутый красный текст на зелёном фоне)
Python file utf 8 (кодировка utf-8 для файлов в python)
Ошибка: если терминал не поддерживает атрибуты, они игнорируются. В Windows рекомендуется предварительно инициализировать colorama.
Как получить богатое форматирование с Rich?
Библиотека rich поддерживает цвета, стили, таблицы, прогресс-бары и многое другое.
Установка: pip install rich.
from rich import print
print('[bold red]Жирный красный[/bold red]')
print('[on blue]Синий фон[/on blue]')
Python config files (конфигурационные файлы в python)
Жирный красный (жирный красный) Синий фон (текст на синем фоне)
Python copy file (копирование файла в python)
Проблема: rich может конфликтовать с другими библиотеками, если не замокать stdout. Для логирования используйте Console отдельно.
Как настроить автоматический сброс цвета в colorama?
Параметр autoreset=True в init() автоматически сбрасывает стили после каждого вызова print.
from colorama import init, Fore
init(autoreset=True)
print(Fore.RED + 'Красный')
print('Обычный')
Python log file (логирование в файл в python)
Красный (красный) Обычный (обычный, без окрашивания)
Нюанс: autoreset добавляет лишние сбросы, что может снизить производительность при большом количестве коротких строк. В таких случаях лучше сбрасывать вручную.
Расширенные примеры цветного вывода
Использование 256 цветов
Современные терминалы поддерживают 256-цветную палитру. Коды выглядят так: \033[38;5;N для текста, \033[48;5;N для фона, где N от 0 до 255.
for i in range(0, 16):
color = f'\033[38;5;{i}m'
print(f'{color}Цвет {i}\033[0m', end=' ')
if (i+1) % 8 == 0:
print()
Цвет 0 Цвет 1 Цвет 2 ... (цветные символы)
RGB цвета (True Color)
Терминалы с поддержкой True Color (24-бит) используют формат \033[38;2;R;G;Bm.
def rgb_text(r, g, b, text):
return f'\033[38;2;{r};{g};{b}m{text}\033[0m'
print(rgb_text(255, 0, 0, 'Красный'))
print(rgb_text(0, 255, 0, 'Зелёный'))
print(rgb_text(0, 0, 255, 'Синий'))
Красный (ярко-красный) Зелёный (ярко-зелёный) Синий (ярко-синий)
Цветное логирование с сохранением ANSI в файл
При записи в файл ANSI-коды сохраняются как обычный текст. Это позволяет просматривать логи в совместимых терминалах.
import logging
from colorama import Fore, Style, init
init()
class ColorFormatter(logging.Formatter):
def format(self, record):
level_colors = {
logging.DEBUG: Fore.CYAN,
logging.INFO: Fore.GREEN,
logging.WARNING: Fore.YELLOW,
logging.ERROR: Fore.RED,
logging.CRITICAL: Fore.MAGENTA
}
color = level_colors.get(record.levelno, Fore.WHITE)
record.msg = f'{color}{record.msg}{Style.RESET_ALL}'
return super().format(record)
logger = logging.getLogger('color_logger')
handler = logging.FileHandler('colored.log', encoding='utf-8')
handler.setFormatter(ColorFormatter())
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info('Информационное сообщение')
logger.warning('Внимание')
Файл colored.log содержит ANSI-коды; при просмотре через cat в Linux они интерпретируются.
Комбинирование с f-строками
from colorama import Fore, Style, init
init()
name = 'Алексей'
score = 95
print(f'{Fore.CYAN}Пользователь: {name}{Style.RESET_ALL}')
print(f'{Fore.YELLOW}Очки: {score}{Style.RESET_ALL}')
Пользователь: Алексей (голубой) Очки: 95 (жёлтый)
Прогресс-бар с Rich
from rich.progress import Progress
import time
with Progress() as progress:
task = progress.add_task('[green]Загрузка...', total=100)
for i in range(101):
progress.update(task, completed=i)
time.sleep(0.02)
Результат: интерактивная полоса с зелёным цветом.
Анимация текста с цветами
import time
from colorama import Fore, Style, init
init()
colors = [Fore.RED, Fore.GREEN, Fore.BLUE, Fore.YELLOW]
message = 'Анимация'
for i in range(10):
color = colors[i % len(colors)]
print(f'{color}{message}{Style.RESET_ALL}', end='\r')
time.sleep(0.3)
print()
Анимация (циклически меняет цвет каждые 0.3 секунды)