本书是为如何用Python进行自动化处理工作以及可以用在哪些方面,面向的人群为想要提高生产力,减少重复劳动的非程序员。
作为一个未来的程序员,我为什么推荐这本面向非程序员的书呢?在我看来,code是一个工具,既然是一种工具,就应该用于帮助解决问题和满足需求。但实际上,在我们许多的coding相关的学习中,我们并没有考虑why,而是简单粗暴地去学习what,这样学习效率不高,而且最关键的是会有一种不知道有什么用/有没有用的迷茫感,从而丧失继续学习的动力。因此,我推荐这本书,从需求出发,以需求作为目标驱动,告诉你能干什么,而且具体的使用部分也不必按部就班的学习,掌握一定的基础语法后即可根据需求跳转到相关部分。
本书结构分为三部分:
- 开头首先解释了为什么可以用编程提高效率以及为什么选择Python
- Python的学习
- Python在日常生活/工作的具体使用
鉴于笔者已经学习过Python,故直接跳过前两部分,进行阅读记录。
读写文件
文件
- 程序运行时,数据可以存储变量中,但若想持久地存储数据,则需存储在文件中
- 文件的表示由路径+文件名组成
- Windows系统路径使用\进行分隔 而Linux/Mac使用/,为确保代码能统一运行,可使用
os.path.join
进行连接路径 os.path.getsize
获取文件大小os.listdir
获取文件夹内容- 文件按内容可分为文本文件和二进制文件
读写
- 过程
open(path, mode='r')
打开文件返回File
对象- 通过
read
或write
对文件对象进行读写 close
关闭文件对象
- 文件打开分为读(r),写(w),追加(a)
- read以字符串形式返回整个文件内容,readline逐行返回
- 可通过
shelve
模块进行变量的读取和保存
实例
随机生成测试文件
地理老师打算给35个学生出一份关于美国50个州对应的城市的选择题,目标形式为35个测试题文件,35个对应的答案文件,要求是35份选择题不一样,其中题目顺序不一样,选择题选项不一样。
- 将测试数据以
dict
的形式存储在文件中/输入代码中 - 创建测试文件和答案文件,并写入首部信息
- 随机函数打乱数据给出的州的顺序,选出对应的城市,在给出的城市数据中删去正确答案,随机选出3个作为错误答案
- 将3中得到的州以及选项城市写入测试文件和答案文件
多重剪贴板
当需要多次进行复制粘贴时,下次的复制内容会把上一次的内容给覆盖,这样当需要重复使用复制内容时就很不方便。因此,实现多重剪贴板的功能,可以记录过往的复制内容,便于重复使用。
- 每次运行程序时通过
shelve
读取本地的变量数据 - 根据输入的参数判断执行的功能
- 当需要记录剪贴板时,调用
pyperclip.paste
获取当前剪贴板内容,并存至变量 - 当需要展示历史剪贴板内容时,将存储的变量列表或单个变量转化为字符串通过
pyperclip.copy
复制进剪贴板
整理文件
批量处理文件,包括遍历,复制,重命名,移动或压缩。主要使用shutil
模块
- 复制:
- shutil.copy
- shutil.copytree
- 移动:
- shutil.move
- 删除
- os.unlink
- os.rmdir 空目录
- os.retree 目录所有
- 遍历 os.walk 返回迭代器关于 current_folder,sub_folders,files
- 压缩 zipfile模块
实例
文件名字转换
将数千个文件的名字中的美式时间 (MM-DD-YYYY)改为欧式时间 (DD-MM-YYYY)
- 构造正则表达式用于识别时间
- 遍历目录的名字
os.listdir
,并通过正则表达式进行识别,并将其分割 - 若满足正则表达式,则通过shutil.move改名
相关任务
- 批量文件名字添加前缀
文件夹压缩
将指定文件夹及其下所有文件和文件夹压缩
- 寻找一可用不重复的压缩路径+文件名
- 创建压缩文件
- 遍历目录,将所有文件和文件夹写入压缩文件
- 关闭压缩文件
WEB爬取
设计模块
- webbrowser
- open 打开网页
- request
- get 获取资源
- raise_for_status 判断是否就绪
- iter_content 获取内容的迭代器
- Beautiful Soup 解析HTML文档
- select
- Selenium
实例
批量打开网页
根据给出的地址批量打开Google Map的网页
- 根据给出的地址生成URL地址
- 使用
webbrowser.open
打开URL地址的网页
搜索关键词
根据关键词进行google搜索,并将搜索结果的每一个页面打开
- 根据关键词使用
request.get
请求搜索结果页面 - 使用Beautiful Soup解析页面,找出所有搜索结果的超链接
- 使用
webbrowser.open
打开获取的超链接
类似用途:
- 打开购物页面所有商品的页面
- 打开商品的所有评价页面
- 获取搜索图片的所有结果
下载网页漫画
下载XKCD的漫画,下载完后下载上一页,直至下载完第一页后结束
- 获取XKCD的网页,抽取漫画部分写入文件
- 找到上一页按钮的超链接,并获取上一页的漫画网页
- 重复1-2直至找不到上一页按钮
操作Excel
利用第三方模块openpyxl
,进行excel文件的读写
- load_workbook
- get_sheet_by_name
- cell(row=1, column=2)
- save
实例
读取Excel并统计数据
根据Excel文件的数据,进行聚类分析,分别进行聚类计数以及聚类求和。 事实上,Excel本身功能即可完成并且更加简单,故跳过。
更新Excel文件中指定列
读取Excel文件,遍历每一行,如果该行为指定商品,则修改其价格
操作PDF
- 打开PDF文件并提取文本
- PDF文档解密——输入密码
- 文档加密
- 创建pdf文件,添加页面
- pdf页面合并——添加水印
实例
多个PDF文档指定页面合并
选择目录下所有PDF文档的非首页按照字典序合并到一个新的PDF文档中
- 获取当前目录所有文件名,并取出以.pdf结尾的文件名添加至数组
- 数组根据文件名排序
- 按顺序打开每一个PDF文档,每一个文档读取从第二页开始读取,添加至新文档
- 保存新文档
操作CSV和JSON
CSV
通过csv模块,可以进行csv的读写。读取类似于一个二维数组,写可以通过write_row写入行。
实例
读取目录下所有csv文件的数据,去除首部信息
- 获取目录所有文件名,并进行遍历,非csv文件跳过
- 打开csv文件,读取csv数据,跳过第一行,其余的行添加进数组
- 将数组中的行以csv方式写入新文件
JSON
Json为常用的一个数据格式,多用于API之间进行交互,但日常生活中用得比较少。通过json模块,可以将json格式的字符串转成dict。
获取实时天气数据
通过网上提过的天气服务接口,获取指定地点的实时天气情况
- 通过命令行获取地点输入
- 将地点作为参数向指定天气服务API发送HTTP请求
- 解析返回的json数据,进行输出
操作Email
实例
根据Excel表格中的会员数据情况,给其中尚未支付本月会籍费用的会员发送邮件进行提醒
- 打开Excel文件读取会员数据,判断最后一列是否为paid,若是,则记录会员名与邮箱地址
- 通过模块smtplib登录邮箱,跟根据上一步记录的信息一一发送邮件
自动化操作鼠标和键盘
通过第三方模块pyautogui实现,可进行图形界面的相关操作:
- 控制鼠标以指定速度移动
- 获取鼠标位置
- 鼠标进行交互操作
- 点击
- 拖动
- 滚动
- 截屏
- 图像识别
- 键盘按下/松开 指定键/组合键