Раскрашивание консольного вывода: от простых ANSI до Rich

Раздел: Python -> Файловый ввод-вывод

Основные способы цветного вывода в 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 добавляет лишние сбросы, что может снизить производительность при большом количестве коротких строк. В таких случаях лучше сбрасывать вручную.

- File handle python (обработка файлов в python)
- Python open file read (открытие файла для чтения в python)
- Python file position (позиционирование в файле python)

Расширенные примеры цветного вывода

Использование 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 секунды)

Цветной вывод текста в Python - comments

En
Python print colors (python)