当前位置: 首页 > 科技观察

使用Python开发一个Emoji查找程序

时间:2023-03-18 10:00:55 科技观察

本文转载自微信公众号《Python中文社区》,Python中文社区,作者。转载本文请联系Python中文社区公众号。今天分享一个前几天搭建的一个小应用,用于命令行搜索emoji表情。它可以从操作系统命令行完成,而且无需单击任何内容即可轻松获取我的表情符号。该工具支持一次将多个匹配的表情符号复制到剪贴板。$emo----------------------------------------------------------------------------------输入一个或更多表情符号相关的词...Endawordwitha.ifyouwanttoselectamojiiftherearemultiplematches,otherwisethefirstmatchwillbepicked.Type'q'退出。>snakebeerfireninjaCopying🐍🍺🔥🥷toclipboard----------------------------------------------------------------------------------输入一个或多个emoji相关词...Endawordwitha.如果你想选择一个moji如果有多个匹配项,否则将选择第一个匹配项。键入'q'退出。>qBye到目前为止,我剪贴板上的所有4个表情符号都已写好,只需在键盘上输入Cmd+V。是不是很酷?安装并运行包gitclonegit@github.com:PyBites-Open-Source/emojisearcher.gitcdemojisearcherpoetryinstallpoetryrunemopoetry使依赖管理变得轻而易举,最后一个命令(别名)实际上有效,因为我把它放在pyproject.toml文件中:[tool.poetry.scripts]emo="emojisearcher.script:main"您还可以通过添加以下shell别名来缩短调用命令(就像我在第一个示例中所做的那样):$aliasemoaliasemo='cdYOUR_PATH/emojisearcher&&poetryrunemo'(将YOUR_PATH更改为您项目的路径。)文件夹结构多亏了poetrynew,文件夹结构从一开始就遵循公认的最佳实践。我喜欢将测试文件放在专用的tests/文件夹中。库我使用表情符号库中的EMOJI_UNICODE常量来查找表情符号:...EMOJI_MAPPING=EMOJI_UNICODE[LANGUAGE]...defget_emojis_for_word(word:str,emoji_mapping:dict[str,str]=EMOJI_MAPPING)->list[str]:return[emoforname,emoinemoji_mapping.items()ifwordinname]然后我用pyperclip复制到操作系统的剪贴板:frompyperclipimportcopy...defcopy_emojis_to_clipboard(matches:list[str])->None:all_matching_emojis=''.join(matches)print(f"Copying{all_matching_emojis}toclipboard")copy(all_matching_emojis)感谢这个库的作者AlSweigart,这是一个很酷的包。如何找到多个表情符号?在这种情况下,我通过user_select_emoji函数进入交互模式。我想以一种创新的方式触发这种交互模式,为此我选择了信号字符(SIGNAL_CHAR):如果用户的搜索字符串以点(.)结尾,它将进入交互模式。原因如下:$emo----------------------------------------------------------------------------------输入一个或更多表情符号相关词...Endawordwitha.ifyouwanttoselectamojiiftherearemultiplematches,otherwisethefirstmatchwillbepicked.Type'q'toexit.>snakeCopying🐍toclipboard------------------------------------------------------------------------------键入一个或更多表情符号相关的词...Endawordwitha.ifyouwanttoselectamojiiftherearemultiplematches,otherwisethefirstmatchwillbepicked.Type'q'toexit.>flagCopying🏴toclipboard-------------------------------------------------------------------------------输入一个或多个与表情符号相关的词...以a结尾。如果你想选择一个表情符号,如果有多个匹配项,否则将选择第一个匹配项。键入“q”退出。9🏴???10🏳??🌈11🏳????12🚩13🏳选择你想要的表情符号数量:12复制🚩到剪贴板----------------------------------------------------------------------------------------Typeoneormoreemojirelatedwords...Endawordwitha.ifyouwanttoselectanemojiiftherearemultiplematches,otherwisethefirstmatchwillpicked.Type'q'toexit.>qBye输入“snake(蛇)”后出现的emoji不会出错,但对于“flag(旗帜)”,则默认选择12个匹配项中的一个第一个(对于“心”,我们得到130个匹配的表情符号!),在这里我想手动选择一个,所以输入一个点“。”做进一步的选择测试更多的东西:@pytest.mark.parametrize真的很好,让你的测试代码更清晰。将代码分解成更多的功能使其更易于重用和测试。我测试了使用@patch("builtins.input",side_effect=['a',10,2,'q']来模拟交互模式下的输入。side_effect中的列表包含将“加倍”输入的参数。这等效于以下内容(在键入tree.):$emo----------------------------------------------------------------------------------键入一个或多个与表情符号相关的词...Endawordwitha.ifyouwanttoselectamojiiftherearemultiplematches,otherwisethefirstmatchwillbepicked.Type'q'退出。>tree.1🎄2🌳3🌲4🌴5🎋选择你想要的表情符号的数量:aaaisnotaninteger.1🎄2🌳3🌲;Selectthenumberoftheemojiyouwant:1010isnotvalidoption.1🎄2🌳3🌲4🌴5🎋Selectthenumberoftheemojiyouwant:2Copying🌳toclipboard--------------------------------------------------------------------------------键入一个或多个表情符号相关的词...以a结尾。如果有多个匹配项,你想选择一个表情符号,否则将选择第一个匹配项。键入'q'退出。>qBye测试代码时,一个有用的技术是删除所有常见的前导空格。您可以为此使用textwrap.dedent,但在这里我使用替代方法inspect.cleandoc。上传到PyPI多亏了toml文件中[tool.poetry]中的一些基本元数据,发布到PyP很容易:poetrybuildpoetrypublish你喜欢这个项目,请在Github上给它加注星标,我们将不胜感激。https://github.com/PyBites-Open-Source/emojisearcher