栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

8.6 项目: 多重剪贴板

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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:Python34mcb.pyw  %*
第 1 步:注释和 shelf 设置
我们从一个脚本框架开始,其中包含一些注释和基本设置。让你的代码看起来像这样:
#!  python3
#  mcb.pyw  -  Saves  and  loads  pieces  of  text  to  the  clipboard.
➊  #  Usage:  py.exe  mcb.pyw  save    -  Saves  clipboard  to  keyword. #     
           py.exe  mcb.pyw    -  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 
章中创建的口令保管箱程序,它将口令保存在一个字典中。更新口令需要更改该程序的源代码。这不太理想,因为普通用户不太适应通过更改源代码来更新他们的软件。而且,每次修改程序的源代码时,就有可能不小心引入新的
缺陷。将程序的数据保存在不同的地方,而不是在代码中,就可以让别人更容易使用你的程序,并且更不容易出错。


8.7    小结


文件被组织在文件夹中(也称为目录),路径描述了一个文件的位置。运行在计算

机上的每个程序都有一个当前工作目录,它让你相对于当前的位置指定文件路径,而非总是需要完整路径(绝对路径)。os.path 模块包含许多函数,用于操作文件路径。
你的程序也可以直接操作文本文件的内容。open()函数将打开这些文件,将它们的内容读取为一个大字符串(利用 reae()方法),或读取为字符串的列表(利用方法 
readlines())。Open()函数可以将文件以写模式或添加模式打开,分别创建新的文本文件或在原有的文本文件中添加内容。
在前面几章中,你利用剪贴板在程序中获得大量文本,而不是通过手工输入。现在你可以用程序直接读取硬盘上的文件,这是一大进步。因为文件比剪贴板更不易变化。在下一章中,你将学习如何处理文件本身,包括复制、删除
、重命名、移动等。

8.8    习题

1.相对路径是相对于什么?
2.绝对路径从什么开始?


3.os.getcwd()和 os.chdir()函数做什么事? 4..和..文件夹是什么?
5.在 C:baconeggsspam.txt 中,哪一部分是目录名称,哪一部分是基本名称?
6.可以传递给open()函数的 3 种“模式”参数是什么?
7.如果已有的文件以写模式打开,会发生什么? 8.read()和 readlines()方法之间的区别是什么? 9.shelf 值与什么数据结构相似?

8.9    实践项目
作为实践,设计并编写下列程序。

8.9.1   扩展多重剪贴板
扩展本章中的多重剪贴板程序,增加一个 delete  命令行参数,它将从 shelf 中删除一个关键字。然后添加一个 delete 命令行参数,它将删除所有关键字。
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号