emoji, 一個(gè)神奇的 Python 庫(kù)
在使用即時(shí)通訊軟件與朋友聊天時(shí),我們常常發(fā)送一些表情來(lái)表達(dá)情感,豐富文字的內(nèi)涵。這些表情符號(hào)并不是圖片,而是文字。
當(dāng)前,計(jì)算機(jī)普遍使用 Unicode 字符集來(lái)確定二進(jìn)制字節(jié)與文字的對(duì)應(yīng)關(guān)系。在 Unicode 字符集中,定義了包括英文、法文、中文等多種語(yǔ)言的文字,并且也定義了表情符號(hào),這些表情符號(hào)被稱為 emoji。
Python 的 emoji 庫(kù)是一個(gè)用于處理表情符號(hào)(Emoji)的第三方庫(kù),可以方便地在字符串中添加、移除或轉(zhuǎn)換 Emoji 符號(hào)。
安裝
emoji 庫(kù)屬于第三方庫(kù),在使用之前,需要提前進(jìn)行安裝和導(dǎo)入:
pip install emoji
資料
- 官方表情符清單:https://www.webfx.com/tools/emoji-cheat-sheet/
- 官網(wǎng):https://pypi.org/project/emoji/
示例
emoji 模塊主要包含2個(gè)函數(shù)
- emoji.emojize() : 將表情符號(hào)短代碼轉(zhuǎn)換為實(shí)際的 emoji
- emoji.demojize() : 將 emoji 轉(zhuǎn)換為表情符號(hào)短代碼
import emoji
# 短代碼轉(zhuǎn)換為emoji
text = "I love :heart: Python :snake:"
print(emoji.emojize(text, language='alias'))
# emoji轉(zhuǎn)換為短代碼
emoji_text = "I love ?? Python ??"
print(emoji.demojize(emoji_text))
輸出調(diào)試:
I love ?? Python ??
I love :red_heart: Python :snake:
高級(jí)
查看所有支持emoji數(shù)據(jù)集:
import emoji
for k, v in emoji.EMOJI_DATA.items():
print(k, v)
輸出結(jié)果:
...
???? {'en': ':vampire_dark_skin_tone:', 'status': 2, 'E': 5}
???? {'en': ':vampire_light_skin_tone:', 'status': 2, 'E': 5}
???? {'en': ':vampire_medium-dark_skin_tone:', 'status': 2, 'E': 5}
???? {'en': ':vampire_medium-light_skin_tone:', 'status': 2, 'E': 5}
???? {'en': ':vampire_medium_skin_tone:', 'status': 2, 'E': 5}
?? {'en': ':vertical_traffic_light:', 'status': 2, 'E': 1}
?? {'en': ':vibration_mode:', 'status': 2, 'E': 0.6}
?? {'en': ':victory_hand:', 'status': 2, 'E': 0.6, 'alias': [':v:'], 'variant': True}
? {'en': ':victory_hand:', 'status': 4, 'E': 0.6, 'alias': [':v:'], 'variant': True}
??? {'en': ':victory_hand_dark_skin_tone:', 'status': 2, 'E': 1}
??? {'en': ':victory_hand_light_skin_tone:', 'status': 2, 'E': 1}
??? {'en': ':victory_hand_medium-dark_skin_tone:', 'status': 2, 'E': 1}
??? {'en': ':victory_hand_medium-light_skin_tone:', 'status': 2, 'E': 1}
??? {'en': ':victory_hand_medium_skin_tone:', 'status': 2, 'E': 1}
?? {'en': ':video_camera:', 'status': 2, 'E': 0.6, 'variant': True}
?? {'en': ':video_game:', 'status': 2, 'E': 0.6, 'variant': True}
?? {'en': ':videocassette:', 'status': 2, 'E': 0.6, 'alias': [':vhs:']}
...
檢查字符串是否為 emoji:
import emoji
print(emoji.is_emoji("??")) # 輸出: True
- 計(jì)算文本中的 emoji 數(shù)量:
import emoji
print(emoji.emoji_count("Python?? is ??")) # 2
- 替換文本中的所有 emoji:
import emoji
print(emoji.replace_emoji("I love ?? coding", ""))
- 使用別名
前面通過emoji.EMOJI_DATA 字典來(lái)查看所有支持的 emoji時(shí),結(jié)果集為字典內(nèi)容,有些定義了別名。
?? {'en': ':upwards_button:', 'status': 2, 'E': 0.6, 'alias': [':arrow_up_small:']}
測(cè)試代碼:
import emoji
print(emoji.emojize(':upwards_button: equal :arrow_up_small:'))
print(emoji.emojize(':arrow_up_small: equal :upwards_button:', language='alias'))
輸出結(jié)果:
?? alias :arrow_up_small:
?? alias ??
特點(diǎn)和優(yōu)勢(shì)
- 標(biāo)準(zhǔn)化:確保 emoji 在不同平臺(tái)上的一致性
- 可維護(hù)性:使用短代碼比直接使用 emoji 字符更易于維護(hù)
- 跨平臺(tái):解決不同系統(tǒng)對(duì) emoji 的兼容性問題
- 靈活性:支持多種表示方式(短代碼、別名、Unicode)