emoji, 一個神奇的 Python 庫
在使用即時通訊軟件與朋友聊天時,我們常常發送一些表情來表達情感,豐富文字的內涵。這些表情符號并不是圖片,而是文字。
當前,計算機普遍使用 Unicode 字符集來確定二進制字節與文字的對應關系。在 Unicode 字符集中,定義了包括英文、法文、中文等多種語言的文字,并且也定義了表情符號,這些表情符號被稱為 emoji。
Python 的 emoji 庫是一個用于處理表情符號(Emoji)的第三方庫,可以方便地在字符串中添加、移除或轉換 Emoji 符號。
安裝
emoji 庫屬于第三方庫,在使用之前,需要提前進行安裝和導入:
pip install emoji
資料
- 官方表情符清單:https://www.webfx.com/tools/emoji-cheat-sheet/
- 官網:https://pypi.org/project/emoji/
示例
emoji 模塊主要包含2個函數
- emoji.emojize() : 將表情符號短代碼轉換為實際的 emoji
- emoji.demojize() : 將 emoji 轉換為表情符號短代碼
import emoji
# 短代碼轉換為emoji
text = "I love :heart: Python :snake:"
print(emoji.emojize(text, language='alias'))
# emoji轉換為短代碼
emoji_text = "I love ?? Python ??"
print(emoji.demojize(emoji_text))
輸出調試:
I love ?? Python ??
I love :red_heart: Python :snake:
高級
查看所有支持emoji數據集:
import emoji
for k, v in emoji.EMOJI_DATA.items():
print(k, v)
輸出結果:
...
???? {'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
- 計算文本中的 emoji 數量:
import emoji
print(emoji.emoji_count("Python?? is ??")) # 2
- 替換文本中的所有 emoji:
import emoji
print(emoji.replace_emoji("I love ?? coding", ""))
- 使用別名
前面通過emoji.EMOJI_DATA 字典來查看所有支持的 emoji時,結果集為字典內容,有些定義了別名。
?? {'en': ':upwards_button:', 'status': 2, 'E': 0.6, 'alias': [':arrow_up_small:']}
測試代碼:
import emoji
print(emoji.emojize(':upwards_button: equal :arrow_up_small:'))
print(emoji.emojize(':arrow_up_small: equal :upwards_button:', language='alias'))
輸出結果:
?? alias :arrow_up_small:
?? alias ??
特點和優勢
- 標準化:確保 emoji 在不同平臺上的一致性
- 可維護性:使用短代碼比直接使用 emoji 字符更易于維護
- 跨平臺:解決不同系統對 emoji 的兼容性問題
- 靈活性:支持多種表示方式(短代碼、別名、Unicode)