用Python开发Emoji表情查找程序

本文转载自微信公众号「Python中文社区」,作者Python中文社区。转载本文请联系Python中文社区公众号。

创新互联服务项目包括昌邑网站建设、昌邑网站制作、昌邑网页制作以及昌邑网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,昌邑网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到昌邑省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

今天分享一个前几天构建的小应用程序,用来从命令行搜索emoji表情符号。

它可以通过OS命令行来完成,而且不必单击任何东西即可获得我的表情符号,更加便捷。

该工具支持一次将多个匹配的表情符号复制到剪贴板。

 
 
 
  1. $ emo
  2. ------------------------------------------------------------------------------------
  3. Type one or more emoji related words ...
  4. End a word with a . if you want to select an emoji if there are multiple
  5. matches, otherwise the first match will be picked. Type 'q' to exit.
  6. > snake beer fire ninja
  7. Copying    ???? to clipboard
  8. ------------------------------------------------------------------------------------
  9. Type one or more emoji related words ...
  10. End a word with a . if you want to select an emoji if there are multiple
  11. matches, otherwise the first match will be picked. Type 'q' to exit.
  12. > q
  13. Bye

至此,我的剪贴板上所有4个表情符号都写好了,在键盘输入Cmd + V即可。

是不是很酷?

安装并运行程序包

 
 
 
  1. git clone git@github.com:PyBites-Open-Source/emojisearcher.git
  2. cd emojisearcher
  3. poetry install
  4. poetry run emo

poetry使依赖项管理变得轻而易举,最后一个命令(别名)实际上有效,因为我将其放在pyproject.toml文件中:

 
 
 
  1. [tool.poetry.scripts]
  2. emo = "emojisearcher.script:main"

您也可以通过添加以下shell别名来使调用命令更短(就像我在第一个示例中一样):

 
 
 
  1. $ alias emo
  2. alias emo='cd YOUR_PATH/emojisearcher && poetry run emo'

(将YOUR_PATH更改为项目的路径。)

文件夹结构

由于有了poetry new,文件夹结构从一开始就遵循了公认的最佳做法。

我喜欢将测试文件放在专用的tests /文件夹中。

我使用emoji库中的EMOJI_UNICODE常量来查找emoji表情:

 
 
 
  1. ...
  2. EMOJI_MAPPING = EMOJI_UNICODE[LANGUAGE]
  3. ...
  4. def get_emojis_for_word(
  5.     word: str, emoji_mapping: dict[str, str] = EMOJI_MAPPING
  6. ) -> list[str]:
  7.     return [emo for name, emo in emoji_mapping.items() if word in name]

然后我使用pyperclip复制到操作系统的剪贴板中:

 
 
 
  1. from pyperclip import copy
  2. ...
  3. def copy_emojis_to_clipboard(matches: list[str]) -> None:
  4.     all_matching_emojis = ' '.join(matches)
  5.     print(f"Copying {all_matching_emojis} to clipboard")
  6.     copy(all_matching_emojis)

感谢这个库的作者AlSweigart,这是一个很酷的程序包。

如何查找多个表情符号?

在这种情况下,我通过user_select_emoji函数进入交互模式。

我想用一种创新的方式来触发此交互模式,为此选择了信号字符(SIGNAL_CHAR):如果用户的搜索字符串以点(.)结尾,它将进入交互模式。

原因如下:

 
 
 
  1. $ emo
  2. ------------------------------------------------------------------------------------
  3. Type one or more emoji related words ...
  4. End a word with a . if you want to select an emoji if there are multiple
  5. matches, otherwise the first match will be picked. Type 'q' to exit.
  6. > snake
  7. Copying  to clipboard
  8. ------------------------------------------------------------------------------------
  9. Type one or more emoji related words ...
  10. End a word with a . if you want to select an emoji if there are multiple
  11. matches, otherwise the first match will be picked. Type 'q' to exit.
  12. > flag
  13. Copying  to clipboard
  14. ------------------------------------------------------------------------------------
  15. Type one or more emoji related words ...
  16. End a word with a . if you want to select an emoji if there are multiple
  17. matches, otherwise the first match will be picked. Type 'q' to exit.
  18. > flag.
  19. 9 ‍️
  20. 10 ️‍
  21. 11 ️‍️
  22. 12 
  23. 13 
  24. Select the number of the emoji you want: 12
  25. Copying  to clipboard
  26. ------------------------------------------------------------------------------------
  27. Type one or more emoji related words ...
  28. End a word with a . if you want to select an emoji if there are multiple
  29. matches, otherwise the first match will be picked. Type 'q' to exit.
  30. > q
  31. Bye

键入“snake(蛇)”后出现的emoji不会出错,但是对于“flag(旗帜)”,它默认选择12个匹配项中的第一个(对于“heart(心脏)”,我们会得到130个匹配的表情符号!),这里我想手动选择一个,因此键入点".",以做出进一步的选择。

测试

还有几件事:

@ pytest.mark.parametrize非常好,可以使您的测试代码更加简洁。

将代码分解为更多的功能使其更可重用且更易于测试。

我测试了使用@patch(“ builtins.input”,side_effect = ['a',10,2,'q']的交互模式模拟input的方法。side_effect中的列表包含将“double” input的参数。这等效于以下内容(在键入tree之后。):

 
 
 
  1. $ emo
  2. ------------------------------------------------------------------------------------
  3. Type one or more emoji related words ...
  4. End a word with a . if you want to select an emoji if there are multiple
  5. matches, otherwise the first match will be picked. Type 'q' to exit.
  6. > tree.
  7. Select the number of the emoji you want: a
  8. a is not an integer.
  9. Select the number of the emoji you want: 10
  10. 10 is not a valid option.
  11. Select the number of the emoji you want: 2
  12. Copying  to clipboard
  13. ------------------------------------------------------------------------------------
  14. Type one or more emoji related words ...
  15. End a word with a . if you want to select an emoji if there are multiple
  16. matches, otherwise the first match will be picked. Type 'q' to exit.
  17. > q
  18. Bye

测试代码时,一种有用的技术是删除所有常见的前导空白。您可以为此使用textwrap.dedent,但是在这里我使用了替代的inspect.cleandoc。

上传到PyPI

感谢toml文件中[tool.poetry]中的一些基本元数据,发布到PyP非常简单:

 
 
 
  1. poetry build
  2. poetry publish

(首先使用--repository of publish在测试PyPI上尝试一下,看是否一切正常。)

如果您喜欢这个项目,请在Github上给它加星标,很高兴能收到反馈。

https://github.com/PyBites-Open-Source/emojisearcher

网页题目:用Python开发Emoji表情查找程序
分享网址:http://www.shufengxianlan.com/qtweb/news45/14495.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联