- 内容提要
- 作者简介
- 技术评审者简介
- 致谢
- 译者序 会编程的人不一样
- 前言
- 本书的读者对象
- 编码规范
- 什么是编程
- 本书简介
- 下载和安装 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 习题答案
6.4 项目:在 Wiki 标记中添加无序列表
在编辑一篇维基百科的文章时,你可以创建一个无序列表,即让每个列表项占据一行,并在前面放置一个星号。但是假设你有一个非常大的列表,希望添加前面的星号。你可以在每一行开始处输入这些星号,一行接一行。或者也可以用一小段Python脚本,将这个任务自动化。
bulletPointAdder.py脚本将从剪贴板中取得文本,在每一行开始处加上星号和空格,然后将这段新的文本贴回到剪贴板。例如,如果我将下面的文本复制到剪贴板(取自于维基百科的文章“List of Lists of Lists”):
Lists of animals Lists of aquarium life Lists of biologists by author abbreviation Lists of cultivars
然后运行bulletPointAdder.py程序,剪贴板中就会包含下面的内容:
* Lists of animals * Lists of aquarium life * Lists of biologists by author abbreviation * Lists of cultivars
这段前面加了星号的文本,就可以粘贴回维基百科的文章中,成为一个无序列表。
第1步:从剪贴板中复制和粘贴
你希望bulletPointAdder.py程序完成下列事情:
1.从剪贴板粘贴文本;
2.对它做一些处理;
3.将新的文本复制到剪贴板。
第2步有一点技巧,但第1步和第3步相当简单,它们只是利用了pyperclip.copy()和pyperclip.paste()函数。现在,我们先写出程序中第1步和第3步的部分。输入以下代码,将程序保存为bulletPointAdder.py:
#! python3 # bulletPointAdder.py - Adds Wikipedia bullet points to the start # of each line of text on the clipboard. import pyperclip text = pyperclip.paste() # TODO: Separate lines and add stars. pyperclip.copy(text)
TODO注释是提醒,你最后应该完成这部分程序。下一步实际上就是实现程序的这个部分。
第2步:分离文本中的行,并添加星号
调用pyperclip.paste()将返回剪贴板上的所有文本,结果是一个大字符串。如果我们使用“List of Lists of Lists”的例子,保存在text中的字符串就像这样:
'Lists of animals\nLists of aquarium life\nLists of biologists by author abbreviation\nLists of cultivars'
在打印到剪贴板,或从剪贴板粘贴时,该字符串中的\n换行字符,让它能显示为多行。在这一个字符串中有许多“行”。你想要在每一行开始处添加一个星号。
你可以编写代码,查找字符串中每个\n换行字符,然后在它后面添加一个星号。但更容易的做法是,使用split()方法得到一个字符串的列表,其中每个表项就是原来字符串中的一行,然后在列表中每个字符串前面添加星号。
让程序看起来像这样:
#! python3 # bulletPointAdder.py - Adds Wikipedia bullet points to the start # of each line of text on the clipboard. import pyperclip text = pyperclip.paste() # Separate lines and add stars. lines = text.split('\n') for i in range(len(lines)): # loop through all indexes in the "lines" list lines[i] = '* ' + lines[i] # add star to each string in "lines" list pyperclip.copy(text)
我们按换行符分割文本,得到一个列表,其中每个表项是文本中的一行。我们将列表保存在lines中,然后遍历lines中的每个表项。对于每一行,我们在开始处添加一个新号和一个空格。现在lines中的每个字符串都以星号开始。
第3步:连接修改过的行
lines列表现在包含修改过的行,每行都以星号开始。但pyperclip.copy()需要一个字符串,而不是字符串的列表。要得到这个字符串,就要将lines传递给join方法,连接列表中字符串。让你的程序看起来像这样:
#! python3 # bulletPointAdder.py - Adds Wikipedia bullet points to the start # of each line of text on the clipboard. import pyperclip text = pyperclip.paste() # Separate lines and add stars. lines = text.split('\n') for i in range(len(lines)): # loop through all indexes for "lines" list lines[i] = '* ' + lines[i] # add star to each string in "lines" list text = '\n'.join(lines) pyperclip.copy(text)
运行这个程序,它将取代剪贴板上的文本,新的文本每一行都以星号开始。现在程序完成了,可以在剪贴板中复制一些文本,试着运行它。
即使不需要自动化这样一个专门的任务,也可能想要自动化某些其他类型的文本操作,诸如删除每行末尾的空格,或将文本转换成大写或小写。不论你的需求是什么,都可以使用剪贴板作为输入和输出。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论