Як виводити у терміналі смайли із застосуванням emoji?

Зміст

У цій статті ми розберемося як виводити у термінал не лише текст, а й смайли та, також, розглянемо функції для роботи з ними. Тож, для цього ми будемо використовувати бібліотеку emoji, яка дозволяє працювати з різного роду смайлами.

Встановлення

Windows:

pip install emoji

MacOS:

pip3 install emoji

Linux:

pip install emoji

Тепер можемо нарешті розглянути функціонал даної бібліотеки на прикладах.

Виведення смайлів у терміналі

Першою розглянемо функцію emojize(), яка надає можливість виводити текст зі смайлами. Ми просто передаємо текст з назвою конкретного смайлу у якості параметра, і у результаті отримаємо текст з вказаним смайлом. Ось приклад реалізації того, що я тільки но описав:

import emoji

emoji_text = "We love Python programming language :snake:"
print(emoji.emojize(emoji_text))

Результат роботи коду:

We love Python programming language 🐍

Якраз :snake: у даному випадку і є назвою смайлу. Замість цієї назви ми можемо вказати будь-яку іншу назву смайлу, тільки зберігаємо двокрапки між його назвою. Подивитися назви смайлів можна тут.

Думаю буде доречним навести ще пару прикладів цієї функції. Все робимо так само як і у першому прикладі тільки змінюємо назву смайла та текст.

Приклад 2:

second_example = "Some hearts :heart_on_fire: :yellow_heart: :orange_heart:"
print(emoji.emojize(second_example))
Some hearts ❤️‍🔥 💛 🧡

Приклад 3:

third_example = "Hi readers! :waving_hand:"
print(emoji.emojize(third_example))
Hi readers! 👋

Також emojize() має ще й параметр variant, який може мати два можливих значення та надає можливість змінити стиль смайла. Можливі значення та їх сенс описаний у таблиці. Щоправда, варто зазначити, що не усі смайли мають текстовий вигляд.

Значення

Сенс

“text_type“

Смайл буде відображатися у текстовому вигляді, тобто він буде чорно-білий.

“emoji_type“

Смайл буде відображатися у звичайному вигляді, тобто він буде кольоровий.

Ось приклади застосування параметра variant:

emoji_text = "It's time to dinner! :alarm_clock:"
print(emoji.emojize(emoji_text, variant="text_type"))
It's time to dinner! ⏰︎
emoji_text = "It's time to dinner! :alarm_clock:"
print(emoji.emojize(emoji_text, variant="emoji_type"))
It's time to dinner! ⏰️

Наступною функцією, котру ми подивимося, буде функція demojize(). Вона є прямою протилежністю emojize(), бо навідміну від неї вона показує назву смайла, а не сам смайл. Тут усе просто. Ось текст з нашого першого прикладу, тільки у цьому випадку ми вказали його як параметр функції demojize(). Приклад наведений нижче:

emoji_text = "We love Python programming language 🐍"
print(emoji.demojize(emoji_text))

А ось і результат:

We love Python programming language :snake:

Словник смайлів

Також назву та іншу інформацію про смайл можна подивитися завдяки словнику EMOJI_DATA[]. Ось як це зробити:

emoji_symbol = "🐍"
print(emoji.EMOJI_DATA[emoji_symbol])
{'en': ':snake:', 'status': 2, 'E': 0.6}

Отримали такий результат. Означення усіх ключів цього словника наведено у таблиці.

Ключ

Сенс

‘en‘

Назва смайлу англійською мовою, у даному випадку :snake:.

‘status‘

Статус смайла, який впливає на його відображення, якщо статус визначається як 2, то з ним все добре і воно добре відображається.

‘E‘

Версія бібліотеки emoji, у якій цей смайл було додано.

Вибираємо смайли з рядка

Далі подивомося на інші функції emoji. Тож, наступною на черзі буде функція analyze(). За допомогою функції analyze() ми можемо вибирати смайли з рядка.

Ось приклад її використання у коді:

emoji_text = "Student - 🧑‍🎓 farmer - 🧑‍🌾 cook - 🧑‍🍳"
analyzed_text = emoji.analyze(emoji_text)

for i in analyzed_text:
    print(i)

Отже, у цьому прикладі ми створюємо змінну emoji_text, якій присвоюємо рядок зі смайлами та передаємо її у функцію analyze(). У циклі for ми просто проходимося по кожному смайлу.

У результаті отримуємо:

Token(chars='🧑\u200d🎓', value=EmojiMatch(🧑‍🎓, 10:13))
Token(chars='🧑\u200d🌾', value=EmojiMatch(🧑‍🌾, 23:26))
Token(chars='🧑\u200d🍳', value=EmojiMatch(🧑‍🍳, 34:37))

У параметрі chars ми бачимо символи, які і утворюють смайли, а у параметрі value — позицію смайлів. Код \u200d потрібен для того, щоб з’єднати два смайли в один, бо у цьому прикладі ми використовуємо саме смайли, що складаються з двох смайлів. Цей код не займає жодного місця на екрані.

Також треба відмітити той факт, що на ми бачимо, що смайл займає місце як один символ, але насправді смайл часто може займати місце як декілька символів. Тому враховуйте це, коли будете дивитися на позиції смайлів (наприклад, 10:13, 23:26, 34:37).

Знаходимо смайли та їх позицію у рядку

Ще одна функція для роботи зі смайлами — emoji_list(). Ця функція знаходить усі смайли у рядку та показує їх позицію.

Ось приклад застосування:

emoji_text = "Faces of animals: 🦁 🐯 🐻 🐼"
print(emoji.emoji_list(emoji_text))
[{'match_start': 18, 'match_end': 19, 'emoji': '🦁'}, {'match_start': 20, 'match_end': 21, 'emoji': '🐯'}, {'match_start': 22, 'match_end': 23, 'emoji': '🐻'}, {'match_start': 24, 'match_end': 25, 'emoji': '🐼'}]

Отримали список, у якому є чотири словника з інформацією про кожен смайл у рядку. Тобто, ‘math_start‘ та ‘math_end‘ — початкова та кінцева позиції смайлів у рядку, ‘emoji‘ — вказує на конкретний смайл, до якого відноситься попередня інформація про позицію. І знову-таки, не забуваємо, що смайли часто займають місце більше ніж один символ.

Підраховуємо кількість смайлів

Переходимо до розгляду наступної функції, а саме функції emoji_count(). Щодо emoji_count(), то вона просто підраховує кількість смайлів у рядку.

Одразу тестуємо функцію:

emoji_text = "Random smiles: 😀 😁 😂 🤪 🤗"
print("Number of emojis:", emoji.emoji_count(emoji_text))
Number of emojis: 5

Одна з особливостей функції emoji_count() — параметр unique, який дозволяє встановити підраховувати (чи ні) смайли, що повторюються у наданому рядку. Додамо до нашого попереднього рядку зі смайлами вже наявний у цьому рядку смайл і протестуємо.

Ось приклад з параметром unique=”True”:

emoji_text = "Random smiles: 😀 😁 😂 🤪 🤗 😀"
print("Number of emojis:", emoji.emoji_count(emoji_text, unique=True))
Number of emojis: 5

Перевірка, чи є передане значення смайлом

Функція is_emoji() перевіряє, чи є передане у неї значення смайлом. Сенс функції доволі зрозумілий, тому одразу переходимо до прикладу:

emoji_text = "😀"
print(emoji.is_emoji(emoji_text))
True

Тобто у даному прикладі передане функції значення є смайлом. Ось ще один приклад:

emoji_text = "😀 😁 😂 🤪 🤗 😀"
print(emoji.is_emoji(emoji_text))
False

Щодо особливості цієї функції — вона надасть True, тільки коли весь рядок одним смайлом. Якщо рядок буде містити більше одного смайла, то вона покаже False. Також треба пам’ятати, що деякі смайли хоч і вважаються одним цілим, але складаються з двох. Ось такий приклад:

emoji_text = "🧑‍🎨"
print(emoji.is_emoji(emoji_text))
True

Для того, щоб перевірити чи має весь рядок тільки смайли є функція purely_emoji(). Ось приклад її використання:

emoji_text = "Random smiles: 😀 😁 😂 🤪 🤗 😀"
print(emoji.purely_emoji(emoji_text))
False

І ще один приклад:

emoji_text = "😀😁😂🤪🤗😀"
print(emoji.purely_emoji(emoji_text))
True

Тут ми були вимушені прибрати пробіли, бо тоді функція все ще буде вважати, що окрім смайлів у рядку є й щось інше.

Заміна смайлів

Тепер переходимо до огляду останньої функції — replace_emoji(). У можливості цієї функції входить заміна смайлів. Просто надаємо функції рядок зі смайлом та вказуємо у параметрі replace значення, на яке хочемо замінити наш смайл.

Приклад 1:

emoji_text = "This is 🤖"
print(emoji.replace_emoji(emoji_text, replace="👾"))
This is 👾

Приклад 2:

emoji_text = "This is 🤖"
print(emoji.replace_emoji(emoji_text, replace=" "))
This is  

Ось ми і побачили replace_emoji() у дії.

Висновок

Отже, у цій статті ми розлянули як користуватися бібліотекою emoji. Ознайомилися з функціями бібліотеки та оглянути їх роботу на прикладах. Якщо ви хотіли б читати більше матеріалів від мене — долучайтеся до мого телеграм каналу.

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader

Нічний читач

33Прочитань
10Автори
1Читачі
На Друкарні з 14 липня

Більше від автора

Вам також сподобається

  • П'ять найпоширеніших міфів про CI/CD

    Розкриваємо 6 найпоширеніших міфів про CI/CD. Дізнайтеся, чому CI/CD не обмежує креативність розробників та може бути використаний навіть у старих проектах. Поглибіть знання про важливість автоматизації в розробці

    Теми цього довгочиту:

    Development
  • Hello world!

    Я — Нікіта, можна Нік. Працюю в IT сфері, в основному із фронтенд-ом, але не тільки. Останні роки займаю позиції техліда.

    Теми цього довгочиту:

    Знайомство
  • Функціональний стиль на Java

    Коментар про використання функціонального стилю в програмуванні на Java для покращення читання коду і його підтримки.

    Теми цього довгочиту:

    Java

Коментарі (2)

Цікава обрана тема статті👍

Вам також сподобається

  • П'ять найпоширеніших міфів про CI/CD

    Розкриваємо 6 найпоширеніших міфів про CI/CD. Дізнайтеся, чому CI/CD не обмежує креативність розробників та може бути використаний навіть у старих проектах. Поглибіть знання про важливість автоматизації в розробці

    Теми цього довгочиту:

    Development
  • Hello world!

    Я — Нікіта, можна Нік. Працюю в IT сфері, в основному із фронтенд-ом, але не тільки. Останні роки займаю позиції техліда.

    Теми цього довгочиту:

    Знайомство
  • Функціональний стиль на Java

    Коментар про використання функціонального стилю в програмуванні на Java для покращення читання коду і його підтримки.

    Теми цього довгочиту:

    Java