Python
Как менять цвет текста в Python: ANSI-коды и colorama
Цвет текста в Python меняют через специальные управляющие последовательности, которые понимает терминал. Сам Python просто выводит строку, а терминал решает, показать ее красной, зеленой, желтой или обычной
Самый простой способ — использовать ANSI-коды. Для более удобной работы на Windows часто подключают библиотеку colorama, которая помогает терминалу корректно обрабатывать цветные последовательности
Самый короткий пример
print("\033[31mКрасный текст\033[0m")
print("\033[32mЗеленый текст\033[0m")
print("Обычный текст")
Здесь \033[31m включает красный цвет, \033[32m включает зеленый цвет, а \033[0m сбрасывает оформление обратно к обычному
Если забыть сброс цвета, следующий вывод тоже может остаться цветным. Поэтому \033[0m лучше добавлять в конце каждой цветной строки
Основные цвета ANSI
| Цвет | Код |
|---|---|
| Черный | \033[30m |
| Красный | \033[31m |
| Зеленый | \033[32m |
| Желтый | \033[33m |
| Синий | \033[34m |
| Фиолетовый | \033[35m |
| Голубой | \033[36m |
| Белый | \033[37m |
| Сброс | \033[0m |
Пример с несколькими цветами
print("\033[33mПредупреждение\033[0m")
print("\033[32mОперация выполнена успешно\033[0m")
print("\033[31mОшибка: файл не найден\033[0m")
Такой вывод удобно использовать в учебных консольных программах: зеленым отмечать успех, желтым предупреждение, красным ошибку
Как сделать код удобнее через константы
Писать ANSI-коды прямо в строках неудобно. Лучше вынести цвета в переменные
RED = "\033[31m"
GREEN = "\033[32m"
YELLOW = "\033[33m"
RESET = "\033[0m"
print(GREEN + "Готово" + RESET)
print(YELLOW + "Проверьте настройки" + RESET)
print(RED + "Ошибка" + RESET)
Так код легче читать. Если потом нужно изменить способ окрашивания, вы меняете константы, а не каждую строку вывода
Функция для цветного вывода
Еще удобнее сделать маленькую функцию
COLORS = {
"red": "\033[31m",
"green": "\033[32m",
"yellow": "\033[33m",
"blue": "\033[34m",
"reset": "\033[0m"
}
def color_text(text, color):
start = COLORS.get(color, "")
reset = COLORS["reset"]
return f"{start}{text}{reset}"
print(color_text("Успех", "green"))
print(color_text("Предупреждение", "yellow"))
print(color_text("Ошибка", "red"))
Теперь можно не помнить коды и передавать понятное имя цвета. Если цвет указан неверно, функция просто вернет текст без окрашивания
Как менять цвет фона
ANSI-коды работают не только с цветом текста, но и с фоном
print("\033[41mБелый текст на красном фоне\033[0m")
print("\033[42mТекст на зеленом фоне\033[0m")
print("\033[44mТекст на синем фоне\033[0m")
Фоновые коды обычно начинаются с 4: 41 для красного, 42 для зеленого, 44 для синего
Для учебных программ фон лучше использовать умеренно. Цветной текст обычно читается легче, чем большие цветные блоки
Colorama: удобный вариант для Windows и простых проектов
Библиотека colorama делает цветной вывод более удобным и помогает с поддержкой терминалов Windows
Установка
pip install colorama
Пример
from colorama import Fore, Style, init
init(autoreset=True)
print(Fore.GREEN + "Готово")
print(Fore.YELLOW + "Предупреждение")
print(Fore.RED + "Ошибка")
print("Обычный текст")
init(autoreset=True) автоматически сбрасывает цвет после каждого вывода. Это удобно для новичков, потому что не нужно каждый раз добавлять Style.RESET_ALL
Если автоматический сброс не использовать, можно писать так
from colorama import Fore, Style
print(Fore.RED + "Ошибка" + Style.RESET_ALL)
Цветной вывод для статусов программы
В реальных учебных скриптах цвета лучше привязывать к смыслу, а не к украшению
from colorama import Fore, Style, init
init(autoreset=True)
def print_success(message):
print(Fore.GREEN + message)
def print_warning(message):
print(Fore.YELLOW + message)
def print_error(message):
print(Fore.RED + message)
print_success("Файл сохранен")
print_warning("Файл уже существует")
print_error("Не удалось открыть файл")
Такой подход делает код понятнее. Вы вызываете print_error(), а не думаете каждый раз, какой именно цвет использовать
Почему цвет может не отображаться
Если вы написали ANSI-коды, а видите странные символы вроде [31m, проблема обычно не в Python, а в среде запуска. Не каждый вывод поддерживает ANSI-последовательности одинаково
Частые причины
- код запускается не в обычном терминале
- IDE показывает вывод в консоли, которая не поддерживает цвета
- Windows-терминал требует
colorama - вывод перенаправлен в файл
- забыта установка или инициализация
colorama
Для проверки запустите файл в обычном терминале. Если там цвет работает, значит проблема в консоли редактора, а не в коде
Мини-практика
Сделайте маленькую программу, которая проверяет оценку и выводит цветной статус
from colorama import Fore, init
init(autoreset=True)
score = 82
if score >= 80:
print(Fore.GREEN + "Отличный результат")
elif score >= 50:
print(Fore.YELLOW + "Нужно повторить тему")
else:
print(Fore.RED + "Тему лучше пройти заново")
После запуска измените score на 45, 65, 95 и проверьте, как меняется цвет вывода
Частые ошибки
Забыть сброс цвета
Если не добавить \033[0m или Style.RESET_ALL, последующий текст может остаться цветным
Ожидать цвет в любом месте вывода
ANSI-коды рассчитаны на терминал. В некоторых IDE, лог-файлах и веб-интерфейсах они могут не работать или отображаться как обычные символы
Использовать слишком много цветов
Если каждая строка разного цвета, читать программу сложнее. Лучше использовать цвета для смысла: успех, предупреждение, ошибка
Путать цвет текста и фон
Коды 31, 32, 33 меняют текст. Коды 41, 42, 43 меняют фон
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Как округлить число в Питоне до целого: round, int, floor и ceil
- Как открыть файл в Python: open(), with, чтение текста и частые ошибки
- Как открыть файл с помощью Python: open, pathlib и чтение текста
- Как сделать калькулятор на Питоне: простой код для начинающих