- 内容提要
- 作者简介
- 技术评审者简介
- 致谢
- 译者序 会编程的人不一样
- 前言
- 本书的读者对象
- 编码规范
- 什么是编程
- 本书简介
- 下载和安装 Python
- 启动 IDLE
- 如何寻求帮助
- 聪明地提出编程问题
- 小结
- 第一部分 Python 编程基础
- 第1章 Python 基础
- 第2章 控制流
- 第3章 函数
- 第4章 列表
- 第5章 字典和结构化数据
- 第6章 字符串操作
- 第二部分 自动化任务
- 第7章 模式匹配与正则表达式
- 第8章 读写文件
- 第9章 组织文件
- 第10章 调试
- 第11章 从 Web 抓取信息
- 第12章 处理 Excel 电子表格
- 第13章 处理 PDF 和 Word 文档
- 第14章 处理 CSV 文件和 JSON 数据
- 第15章 保持时间、计划任务和启动程序
- 第16章 发送电子邮件和短信
- 第17章 操作图像
- 第18章 用 GUI 自动化控制键盘和鼠标
- 附录A 安装第三方模块
- 附录B 运行程序
- 附录C 习题答案
8.6 项目:多重剪贴板
假定你有一个无聊的任务,要填充一个网页或软件中的许多表格,其中包含一些文本字段。剪贴板让你不必一次又一次输入同样的文本,但剪贴板上一次只有一个内容。如果你有几段不同的文本需要拷贝粘贴,就不得不一次又一次的标记和拷贝几个同样的内容。
可以编写一个Python程序,追踪几段文本。这个“多重剪贴板”将被命名为mcb.pyw(因为“mcb”比输入“multiclipboard”更简单)。.pyw扩展名意味着Python运行该程序时,不会显示终端窗口(详细内容请参考附录B)。
该程序将利用一个关键字保存每段剪贴板文本。例如,当运行py mcb.pyw save spam,剪贴板中当前的内容就用关键字spam保存。通过运行py mcb.pyw spam,这段文本稍后将重新加载到剪贴板中。如果用户忘记了都有哪些关键字,他们可以运行py mcb.pyw list,将所有关键字的列表复制到剪贴板中。
下面是程序要做的事:
· 针对要检查的关键字,提供命令行参数。
· 如果参数是save,那么将剪贴板的内容保存到关键字。
· 如果参数是list,就将所有的关键字拷贝到剪贴板。
· 否则,就将关键词对应的文本拷贝到剪贴板。
这意味着代码需要做下列事情:
· 从sys.argv读取命令行参数。
· 读写剪贴板。
· 保存并加载shelf文件。
如果你使用Windows,可以创建一个名为mcb.bat的批处理文件,很容易地通过“Run…”窗口运行这个脚本。该批处理文件包含如下内容:
@pyw.exe C:\Python34\mcb.pyw %*
第1步:注释和shelf设置
我们从一个脚本框架开始,其中包含一些注释和基本设置。让你的代码看起来像这样:
#! python3 # mcb.pyw - Saves and loads pieces of text to the clipboard. ❶ # Usage: py.exe mcb.pyw save <keyword> - Saves clipboard to keyword. # py.exe mcb.pyw <keyword> - Loads keyword to clipboard. # py.exe mcb.pyw list - Loads all keywords to clipboard. ❷ import shelve, pyperclip, sys ❸ mcbShelf = shelve.open('mcb') # TODO: Save clipboard content. # TODO: List keywords and load content. mcbShelf.close()
将一般用法信息放在文件顶部的注释中,这是常见的做法❶。如果忘了如何运行这个脚本,就可以看看这些注释,帮助回忆起来。然后导入模块❷。拷贝和粘贴需要pyperclip模块,读取命令行参数需要sys模块。shelve模块也需要准备好。当用户希望保存一段剪贴板文本时,你需要将它保存到一个shelf文件中。然后,当用户希望将文本拷贝回剪贴板时,你需要打开shelf文件,将它重新加载到程序中。这个shlef文件命名时带有前缀mcb❸。
第2步:用一个关键字保存剪贴板内容
根据用户希望保存文本到一个关键字,或加载文本到剪贴板,或列出已有的关键字,该程序做的事情不一样。让我们来处理第一种情况。让你的代码看起来像这样:
#! python3 # mcb.pyw - Saves and loads pieces of text to the clipboard. --snip-- # Save clipboard content. ❶ if len(sys.argv) == 3 and sys.argv[1].lower() == 'save': ❷ mcbShelf[sys.argv[2]] = pyperclip.paste() elif len(sys.argv) == 2: ❸ # TODO: List keywords and load content. mcbShelf.close()
如果第一个命令行参数(它总是在sys.argv列表的下标1处)是字符串'save' ❶,第二个命令行参数就是保存剪贴板当前内容的关键字。关键字将用做 mcbShelf中的键,值就是当前剪贴板上的文本❷。
如果只有一个命令行参数,就假定它要么是'list',要么是需要加载到剪贴板的关键字。稍后你将实现这些代码。现在只是放上一条TODO注释❸。
第3步:列出关键字和加载关键字的内容
最后,让我们实现剩下的两种情况。用户希望从关键字加载剪贴板文本,或希望列出所有可用的关键字。让你的代码看起来像这样:
#! python3 # mcb.pyw - Saves and loads pieces of text to the clipboard. --snip-- # Save clipboard content. if len(sys.argv) == 3 and sys.argv[1].lower() == 'save': mcbShelf[sys.argv[2]] = pyperclip.paste() elif len(sys.argv) == 2: # List keywords and load content. ❶ if sys.argv[1].lower() == 'list': ❷ pyperclip.copy(str(list(mcbShelf.keys()))) elif sys.argv[1] in mcbShelf: ❸ pyperclip.copy(mcbShelf[sys.argv[1]]) mcbShelf.close()
如果只有一个命令行参数,首先检查它是不是'list' ❶。如果是,表示shelf键的列表的字符串将被拷贝到剪贴板❷。用户可以将这个列表拷贝到一个打开的文本编辑器,进行查看。
否则,你可以假定该命令行参数是一个关键字。如果这个关键字是shelf中的一个键,就可以将对应的值加载到剪贴板❸。
齐活了!加载这个程序有几个不同步骤,这取决于你的计算机使用哪种操作系统。请查看附录B,了解操作系统的详情。
回忆一下第6章中创建的口令保管箱程序,它将口令保存在一个字典中。更新口令需要更改该程序的源代码。这不太理想,因为普通用户不太适应通过更改源代码来更新他们的软件。而且,每次修改程序的源代码时,就有可能不小心引入新的缺陷。将程序的数据保存在不同的地方,而不是在代码中,就可以让别人更容易使用你的程序,并且更不容易出错。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论