Эмодзи в Python: печать, извлечение и замена

Важно: кодовые примеры рассчитаны на Python 3.6+ и требуют установки соответствующих библиотек (pip install emoji, regex, demoji), где это указано.
Зачем использовать эмодзи в коде и документации
Эмодзи — компактный графический способ передать эмоцию или категорию. В коде их применяют в комментариях, сообщениях коммитов, логах и документации, чтобы улучшить читаемость и ускорить восприятие. Для машинной обработки эмодзи можно представлять как Unicode-символы или преобразовывать в читабельные метки.
Краткое определение: эмодзи — это графический символ, представленный в Unicode и часто отображаемый как цветная иконка на платформах.
Печать эмодзи в Python
Печатать эмодзи в Python проще, чем кажется. Основные способы:
- через Unicode-коды;
- через CLDR-имена (именованные последовательности);
- через библиотеку emoji, которая даёт удобный синтаксис и демонизацию.
Использование Unicode-символов
Unicode присваивает уникальный код каждому эмодзи. В Python Unicode-escape записывается как \U000XXXXX: знак “+” из формата U+ заменяется на 000 и добавляется префикс “\U”.
Пример: U+1F605 → \U0001F605
# улыбающееся лицо
print("\U0001F600")
# лицо с улыбающимися глазами
print("\U0001F601")
# лицо с каплей пота
print("\U0001F605")
# валяется от смеха
print("\U0001F923")
# лицо со слезами радости
print("\U0001F602")
# слегка улыбающееся лицо
print("\U0001F642")
# лицо с нимбом
print("\U0001F607")
# лицо с глазами в виде сердца
print("\U0001F60D")
# лицо с молнией на рту (застегнутый рот)
print("\U0001F910")
# недовольное лицо
print("\U0001F612")Вывод примера обычно выглядит так (в зависимости от шрифта и платформы):
😀
😁
😅
🤣
😂
🙂
😇
😅
🤐
😒Примечание: поведение зависит от терминала/консоли и кодировки. В Linux/Windows/ macOS убедитесь, что терминал поддерживает UTF-8 и выбран подходящий шрифт.
Использование CLDR-имен
CLDR (Common Locale Data Repository) содержит стандартные имена для эмодзи. В Python их можно использовать через escape-последовательность \N{имя}.
# лицо в темных очках
print("\N{smiling face with sunglasses}")
# улыбающееся лицо
print("\N{grinning face}")
# плачет навзрыд
print("\N{loudly crying face}")
# валяется от смеха
print("\N{rolling on the floor laughing}")
# лицо со слезами радости
print("\N{face with tears of joy}")
# слегка улыбающееся лицо
print("\N{slightly smiling face}")
# лицо с нимбом
print("\N{smiling face with halo}")
# злое лицо
print("\N{angry face}")
# лицо с застёгнутым ртом
print("\N{zipper-mouth face}")
# недовольное лицо
print("\N{unamused face}")Это удобно, когда вы хотите читабельный код без вставки длинных шестнадцатеричных кодов.
Использование библиотеки emoji
Библиотека emoji упрощает работу с эмодзи: именованные теги, демоджизация и обратная замена. Сначала установите библиотеку:
pip install emojiПример использования:
# Импорт
from emoji import emojize
# лицо в темных очках
print(emojize(":smiling_face_with_sunglasses:"))
# улыбающееся лицо
print(emojize(":grinning_face:"))
# плачет навзрыд
print(emojize(":loudly_crying_face:"))
# валяется от смеха
print(emojize(":rolling_on_the_floor_laughing:"))
# лицо со слезами радости
print(emojize(":face_with_tears_of_joy:"))
# слегка улыбающееся лицо
print(emojize(":slightly_smiling_face:"))
# лицо с нимбом
print(emojize(":smiling_face_with_halo:"))
# злое лицо
print(emojize(":angry_face:"))
# лицо с застёгнутым ртом
print(emojize(":zipper-mouth_face:"))
# недовольное лицо
print(emojize(":unamused_face:"))Вывод будет зависеть от системы, но библиотека делает код более декларативным. Если вам нужно контролируемое отображение или замена на текстовые теги — emoji предоставляет инструменты для этого.
Важно: версии библиотеки и набор emoji могут различаться; при поддержке новых символов обновляйте библиотеку.
Извлечение всех эмодзи из текста
Чтобы найти все эмодзи в строке, удобно применять регулярные выражения. Часто используют библиотеку regex (её расширенные возможности лучше подходят для Unicode):
pip install regexПример:
import regex as re
text = 'We 😊 want 😅 to 😏 extract 😁 these 😀 emojis '
# Простое регулярное выражение, которое захватывает нетекстовые символы
emojis = re.findall(r'[^\w\s,. ]', text)
print(emojis)Вывод:
['😊', '😅', '😏', '😁', '😀']Примечание: корректное покрытие всех эмодзи — нетривиальная задача, потому что в Unicode есть сложные последовательности (семейства, флаги, модификаторы тонов кожи). Для надёжной обработки стоит использовать специализированные пакеты.
Конвертация эмодзи в текст
demoji — библиотека, которая умеет находить эмодзи и давать текстовые описания. Установка:
pip install demojiПосле установки нужно загрузить актуальную базу кодов:
import demoji
demoji.download_codes()Пример использования:
import demoji
text = "Convert 😄 the 😎 given emojis 😒 to 😠 text"
emojis = demoji.findall(text)
print(emojis)Примерный вывод:
{'😒': 'unamused face',
'😄': 'grinning face with smiling eyes',
'😠': 'angry face',
'😎': 'smiling face with sunglasses',
}Важно: demoji возвращает описания на английском (исходные данные CLDR). При необходимости переводите метки для локализованных интерфейсов.
Замена эмодзи на их описание
Библиотека emoji позволяет заменить символы на текстовые теги (демоджизация). Пример:
import emoji
text = """These are some of the most used emojis
1. 😂
2. 😍
3. 🤣"""
replaced_text = emoji.demojize(text, delimiters=("", ""))
print(replaced_text)Вывод:
These are some of the most used emojis
1. face_with_tears_of_joy
2. smiling_face_with_heart-eyes
3. rolling_on_the_floor_laughingИспользуйте такую замену, если нужно сохранить смысл эмодзи в логах или при индексировании.
Удаление эмодзи из текста
Регулярные выражения помогают удалить эмодзи, сформировав диапазоны Unicode. Пример функции:
import re
text = """These are some of the most used emojis
1. 😂 Emoji 1
2. 😍 Emoji 2
"""
print(text)
def removeEmoji(text):
regrex_pattern = re.compile(pattern = "["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"]+", flags = re.UNICODE)
return regrex_pattern.sub(r'',text)
print(removeEmoji(text))Вывод покажет исходный текст и версию без эмодзи. Учтите, что такой диапазон не покрывает сложные модификаторы и составные последовательности — для полного удаления потребуется более продвинутая логика.
Когда методы не сработают или дают некорректный результат
- Терминал или шрифт не поддерживает отображение новых эмодзи — будут отображаться пустые квадраты или символы-заполнители.
- Простые регулярки не покрывают составные последовательности, такие как флаги (пара кодовых точек) или семьи (несколько эмодзи, связанных специальными символами).
- Библиотеки могут содержать устаревшие данные: новые эмодзи добавляются в Unicode и требуют обновления пакетов.
Альтернативные подходы
- Использовать готовые сервисы/API (например, Unicode CLDR или emoji API) для получения актуального списка и описаний.
- Хранить в базе маппинг кодэмодзи → локализованнаястрока и обновлять его периодически.
- Для веб-интерфейсов использовать изображения SVG/PNG, чтобы обеспечить единообразный внешний вид.
Практическая методика и чек-листы
Мини-методология при работе с эмодзи в проекте:
- Выберите цель: отображение, логирование, поиск или удаление.
- Проверяйте поддержку в целевых средах (терминал, веб, мобильное приложение).
- Выберите стратегию (Unicode/CLDR/библиотека/API).
- Напишите тесты на случаи с составными последовательностями и модификаторами.
- Обновляйте словари при релизе новых версий Unicode.
Чек-лист для разработчика:
- Консоль поддерживает UTF-8.
- Установлены необходимые библиотеки (emoji, regex, demoji).
- Обработаны составные последовательности (семьи, флаги).
- Добавлены unit-тесты для ключевых случаев.
Чек-лист для автора документации:
- Эмодзи используются последовательно и не заменяют важную текстовую информацию.
- Для международных пользователей присутствуют текстовые альтернативы.
- Локализация описаний эмодзи учтена, если требуется.
Критерии приёмки
- Эмодзи корректно отображаются в целевых средах.
- Функции извлечения/удаления корректно обрабатывают составные последовательности в 90% реальных кейсов.
- Для логов эмодзи либо демоджированы, либо удалены согласно требованиям к индексированию.
Совместимость и замечания по локализации
- Unicode постоянно развивается: проверяйте соответствие версии Unicode в зависимости от платформы.
- demoji возвращает английские описания — при локализации переводите их в словарь.
- В вебе используйте fallback-иконки, если шрифт не поддерживает новые эмодзи.
Небольшая галерея крайних случаев
- Флаги состоят из пары региональных индикаторов и могут быть неправильно распознаны простыми шаблонами.
- Комбинации тонов кожи — последовательности с модификатором, их легко удалить по ошибке, если не учитывать модификаторы.
- Составные эмодзи (семьи, профессии с гендерным признаком) — состоят из нескольких кодовых точек.
Глоссарий
- CLDR — база локализации Unicode с именами символов.
- Demojize — замена эмодзи на текстовое имя или тег.
- Составная последовательность — эмодзи, которое состоит из нескольких кодовых точек.
Итог: эмодзи удобны для визуальной коммуникации и могут быть успешно обработаны в Python разными способами. Выбирайте подход в зависимости от задачи: простая печать — Unicode или CLDR; удобная работа с тегами и демоджизация — библиотека emoji; для извлечения и преобразования в текст — regex и demoji.
Ключевые ссылки и команды установки:
- pip install emoji
- pip install regex
- pip install demoji
Примечание: регулярно обновляйте используемые библиотеки, чтобы поддерживать актуальную базу эмодзи.
Похожие материалы
Отключить Siri: не зачитывать уведомления
Google Календарь: тайм‑блокинг для продуктивности
Как перейти на новый компьютер быстро и безопасно
Nearby sharing в Windows 11 — как включить и использовать
Как убрать уведомления Windows 10