本书由一线Python开发工程师精心编写,循序渐进地介绍Python自动化编程的相关知识,全书共20章,第1~14章讲解Python编程基础知识,第15章介绍关系型数据库SQLite和MySQL、非关系型数据库MongoDB和Redis、ORM框架SQLAlchemy的应用,第16~20章分别介绍Selenium实现网页自动化、Requests实现网页爬虫编程、办公自动化编程、OpenCV实现图像识别与定位、Web系统的开发与部署。
本书理论与实践相结合,案例丰富,非常适合从零开始学习自动化编程的读者学习。
封面图
目录
- 前言
- 第1章 构建开发环境 . 1
- 1.1 Python的发展历程 . 1
- 1.2 Python的应用场景 . 2
- 1.3 安装Python . 3
- 1.3.1 在Windows下安装Python 3.8 . 3
- 1.3.2 在Linux下安装Python 3.8 6
- 1.4 PyCharm的安装与使用 . 7
- 1.4.1 安装PyCharm 7
- 1.4.2 运行PyCharm 9
- 1.4.3 创建项目 10
- 1.4.4 编写并运行HelloWorld项目 . 12
- 1.4.5 设置PyCharm开发环境 . 13
- 1.5 实战项目:复读机 . 15
- 1.6 本章小结 17
- 第2章 基础语法 18
- 2.1 关键字与标识符 . 18
- 2.1.1 关键字 . 18
- 2.1.2 标识符 . 19
- 2.2 变量 21
- 2.2.1 变量的定义与使用 21
- 2.2.2 变量的深拷贝和浅拷贝 23
- 2.3 运算符的使用 . 26
- 2.3.1 算术运算符 26
- 2.3.2 比较运算符 27
- 2.3.3 赋值运算符 28
- 2.3.4 逻辑运算符 29
- 2.3.5 位运算符 30
- 2.3.6 成员运算符 31
- 2.3.7 身份运算符 31
- 2.3.8 运算符的优先级 32
- 2.4 编码规范 33
- 2.4.1 代码注释 33
- 2.4.2 模块与包 34
- 2.4.3 编码缩进 36
- 2.5 实战项目:猜数字游戏 . 37
- 2.6 本章小结 39
- 第3章 数据类型 40
- 3.1 数字类型 40
- 3.1.1 整型数据的进制与转换 40
- 3.1.2 浮点数的精度处理 43
- 3.1.3 布尔型数据的逻辑运算 44
- 3.1.4 复数的使用与运算 45
- 3.2 字符串类型 . 45
- 3.2.1 定义与使用 . 46
- 3.2.2 格式化操作 48
- 3.2.3 使用运算符 52
- 3.2.4 大小写转换:capitalize() 53
- 3.2.5 大写转小写:lower() . 54
- 3.2.6 小写转大写:upper() . 55
- 3.2.7 大小写切换:swapcase() . 56
- 3.2.8 查找索引:find() . 57
- 3.2.9 查找索引:index() . 57
- 3.2.10 序列拼接字符串:join() 58
- 3.2.11 分隔字符串:split() . 59
- 3.2.12 单个替换:replace() 60
- 3.2.13 类型检测:isalnum()、isalpha()和isdigit() 61
- 3.3 实战项目:客服热线 . 62
- 3.4 本章小结 . 64
- 第4章 元组和列表 67
- 4.1 序列的操作 . 67
- 4.1.1 索引的正负值 67
- 4.1.2 元素截取操作 69
- 4.1.3 相加与相乘 71
- 4.1.4 检测元素是否存在 73
- 4.2 元组的操作 . 75
- 4.2.1 基本操作 76
- 4.2.2 计算长度:len() . 77
- 4.2.3 最大值和最小值:max()和min() . 78
- 4.2.4 累加求和:sum() . 79
- 4.2.5 格式转换:tuple() 79
- 4.2.6 查找索引:index() . 80
- 4.2.7 计算出现次数:count() . 81
- 4.3 列表的操作 . 81
- 4.3.1 基本操作 82
- 4.3.2 新增元素:append() 84
- 4.3.3 插入元素:insert() . 84
- 4.3.4 新增多个元素:extend() . 85
- 4.3.5 移除元素:pop() 86
- 4.3.6 移除元素:remove() 87
- 4.3.7 列表反转:reverse() 88
- 4.3.8 列表排序:sort()与sorted() 88
- 4.3.9 清空列表:clear() 90
- 4.3.10 复制列表:copy() 91
- 4.3.11 格式转换:list() . 92
- 4.4 实战项目:“营救村民”游戏 . 93
- 4.5 本章小结 . 97
- 第5章 集合和字典 99
- 5.1 集合的创建与操作 . 99
- 5.1.1 添加元素:add()和update() 100
- 5.1.2 删除元素:pop()、remove()和discard() 101
- 5.1.3 获取两个集合的交集:intersection() . 102
- 5.1.4 获取两个集合的并集:union() . 103
- 5.1.5 获取两个集合的差集:difference() 104
- 5.1.6 判断子集:issubset()和issuperset() 105
- 5.1.7 格式转换:set() . 106
- 5.2 字典的创建与操作 . 107
- 5.2.1 基本操作 107
- 5.2.2 获取键值:get()和setdefault() 109
- 5.2.3 删除键值对:pop()和popitem() . 110
- 5.2.4 获取所有键:keys() 111
- 5.2.5 获取所有值:values() . 112
- 5.2.6 获取所有键值:items() . 112
- 5.2.7 更新字典:update() . 113
- 5.2.8 格式转换:dict() 113
- 5.3 实战项目:社交功能“好友推荐” . 114
- 5.4 本章小结 116
- 第6章 流程控制语句 117
- 6.1 条件判断 117
- 6.1.1 if语句 . 117
- 6.1.2 if嵌套 . 119
- 6.2 循环遍历 . 120
- 6.2.1 for循环 . 120
- 6.2.2 while循环 122
- 6.2.3 终止循环:break . 123
- 6.2.4 跳过本次循环:continue . 124
- 6.2.5 空语句:pass . 125
- 6.3 三目运算符 126
- 6.4 推导式 . 127
- 6.5 实战项目:个人健康评测 . 130
- 6.6 本章小结 . 132
- 第7章 函数 134
- 7.1 内置函数 . 134
- 7.2 自定义函数 . 137
- 7.3 函数参数 . 139
- 7.3.1 形参与实参 139
- 7.3.2 必选参数 140
- 7.3.3 默认参数 141
- 7.3.4 关键字参数 143
- 7.3.5 可变参数 144
- 7.3.6 设置数据类型 147
- 7.4 函数返回值 148
- 7.5 函数调用过程 . 150
- 7.6 变量的作用域 . 151
- 7.7 递归函数 . 152
- 7.8 匿名函数 . 155
- 7.9 偏函数 . 157
- 7.10 实战项目:排序算法 . 158
- 7.10.1 冒泡排序 158
- 7.10.2 选择排序 159
- 7.10.3 插入排序 160
- 7.10.4 希尔排序 161
- 7.10.5 归并排序 162
- 7.11 本章小结 163
- 第8章 面向对象编程 166
- 8.1 对象与类 166
- 8.2 类的自定义与使用 . 167
- 8.2.1 类的定义 167
- 8.2.2 类的内置属性和方法 168
- 8.2.3 静态方法、类方法和实例方法 170
- 8.2.4 类的property属性 . 172
- 8.2.5 类的实例化与使用 173
- 8.2.6 动态添加类的属性和方法 176
- 8.2.7 内置属性:__slots__ . 178
- 8.3 类的封装 . 179
- 8.4 类的继承 . 180
- 8.5 内置函数:super() 183
- 8.6 类的多态 . 186
- 8.7 动态创建类 188
- 8.8 创建类的类:元类 . 189
- 8.9 实战项目:家庭游戏 . 191
- 8.10 本章小结 194
- 第9章 高级特性 . 196
- 9.1 迭代器 . 196
- 9.1.1 认识迭代器 196
- 9.1.2 自定义迭代器 198
- 9.1.3 迭代器的作用与扩展 199
- 9.2 生成器 . 200
- 9.3 装饰器 . 202
- 9.3.1 无参数的函数装饰器 202
- 9.3.2 带参数的函数装饰器 206
- 9.3.3 使用类定义装饰器 207
- 9.3.4 装饰器在类中的应用 209
- 9.4 实战项目:工厂模式 . 210
- 9.5 本章小结 211
- 第10章 异常机制 . 212
- 10.1 异常的类型 212
- 10.2 捕捉异常 215
- 10.3 自定义异常 217
- 10.4 异常的追踪术 . 218
- 10.5 实战项目:狼人游戏 . 221
- 10.6 本章小结 222
- 第11章 模块与包 . 224
- 11.1 模块的导入与使用 . 224
- 11.2 包的导入与使用 . 225
- 11.3 导入方式from…import… 226
- 11.4 重命名模块与包 . 227
- 11.5 自定义模块与包 . 228
- 11.6 重新加载模块与包 . 228
- 11.7 动态添加模块与包 . 230
- 11.8 打包模块与包 . 232
- 11.9 安装第三方模块与包 . 235
- 11.10 实战项目:可扩展的答题系统 . 237
- 11.11 本章小结 . 238
- 第12章 日期与时间 240
- 12.1 日期与时间的类型 . 240
- 12.2 calendar模块 243
- 12.3 time模块 248
- 12.4 datetime模块 250
- 12.5 实战项目:限时支付 . 261
- 12.6 本章小结 262
- 第13章 文件处理 . 264
- 13.1 使用os模块处理文件与目录 264
- 13.2 使用open()读写TXT文件 267
- 13.3 使用configparser读写配置文件 . 270
- 13.4 使用csv读写CSV文件 273
- 13.5 使用xlrd和xlwt读写Excel文件 . 275
- 13.6 使用python-docx读写Word文件 278
- 13.7 实战项目:多文件读写功能 . 280
- 13.8 本章小结 . 282
- 第14章 进程、线程与协程 . 285
- 14.1 为什么会有GIL 285
- 14.2 进程、线程与协程的区别 . 286
- 14.3 使用多线程 . 287
- 14.3.1 使用线程 288
- 14.3.2 守护线程 289
- 14.3.3 等待线程结束 290
- 14.3.4 多线程共享全局变量 291
- 14.3.5 互斥锁 291
- 14.3.6 信号量 292
- 14.3.7 线程事件 293
- 14.4 基于进程的并行 . 294
- 14.4.1 守护进程 295
- 14.4.2 等待进程结束 296
- 14.4.3 互斥锁 297
- 14.4.4 通信和共享数据 297
- 14.4.5 信号量 298
- 14.4.6 进程事件 299
- 14.4.7 进程池 300
- 14.5 使用concurrent.futures执行并行任务 303
- 14.5.1 获取任务的执行结果 304
- 14.5.2 设置回调函数 305
- 14.5.3 取消任务 306
- 14.5.4 处理异常 307
- 14.6 协程的应用 308
- 14.6.1 yield与yield from 308
- 14.6.2 异步并发asyncio与async/await 311
- 14.7 实战项目:生产者和消费者模式 . 313
- 14.8 本章小结 315
- 第15章 数据库编程 317
- 15.1 SQLite的应用 . 317
- 15.1.1 连接并创建数据表 318
- 15.1.2 新增数据 319
- 15.1.3 更新数据 319
- 15.1.4 删除数据 320
- 15.1.5 查询数据 321
- 15.2 MySQL的应用 . 322
- 15.2.1 MySQL的安装与使用 322
- 15.2.2 连接并创建数据表 324
- 15.2.3 新增数据 325
- 15.2.4 更新数据 326
- 15.2.5 删除数据 327
- 15.2.6 查询数据 328
- 15.3 MongoDB的应用 . 329
- 15.3.1 MongoDB的安装与使用 330
- 15.3.2 连接MongoDB 332
- 15.3.3 新增文档 333
- 15.3.4 更新文档 335
- 15.3.5 删除文档 336
- 15.3.6 查询文档 337
- 15.4 Redis的应用 340
- 15.4.1 Redis的安装与使用 341
- 15.4.2 连接Redis 342
- 15.4.3 新增数据 343
- 15.4.4 更新数据 345
- 15.4.5 删除数据 347
- 15.4.6 查询数据 349
- 15.5 ORM框架SQLAlchemy 351
- 15.5.1 SQLAlchemy框架的概述与安装 . 352
- 15.5.2 连接数据库 352
- 15.5.3 创建数据表 354
- 15.5.4 新增数据 356
- 15.5.5 更新数据 357
- 15.5.6 删除数据 359
- 15.5.7 查询数据 360
- 15.6 实战项目:多数据库读写功能 . 362
- 15.7 本章小结 367
- 第16章 使用Selenium实现网页操作自动化 . 370
- 16.1 了解Selenium . 370
- 16.2 安装Selenium . 371
- 16.3 使用浏览器查找元素 . 374
- 16.4 使用Selenium定位元素 377
- 16.5 使用Selenium操控元素 380
- 16.6 Selenium常用功能 . 384
- 16.7 实战项目:百度登录与答题 . 391
- 16.8 本章小结 397
- 第17章 使用Requests实现自动爬取网页数据 . 398
- 17.1 分析网站接口 . 398
- 17.2 Requests的安装 401
- 17.3 简单的请求方式 . 401
- 17.4 复杂的请求方式 . 403
- 17.5 文件下载与上传 . 406
- 17.6 实战项目:12306车次查询 407
- 17.7 本章小结 411
- 第18章 办公自动化编程. 413
- 18.1 使用PyAutoGUI模拟人工操作 413
- 18.1.1 PyAutoGUI概述及安装 413
- 18.1.2 截图与识别 414
- 18.1.3 鼠标控制功能 417
- 18.1.4 键盘控制功能 418
- 18.1.5 消息框功能 420
- 18.1.6 实战项目:百度自动登录 421
- 18.2 实现软件的自动化操作 . 424
- 18.2.1 PyWinAuto概述及安装 424
- 18.2.2 查找软件信息 425
- 18.2.3 连接CS软件 . 428
- 18.2.4 基于uia的软件操控 . 431
- 18.2.5 基于Win32的软件操控 . 435
- 18.2.6 从源码剖析PyWinAuto 438
- 18.2.7 实战项目:自动撰写新闻稿 439
- 18.3 本章小结 446
- 第19章 使用OpenCV实现图像识别与定位 449
- 19.1 OpenCV概述及安装 449
- 19.2 图像特征点检测算法 . 450
- 19.3 图像匹配与定位 . 454
- 19.4 实战项目:自动打印PDF文件 459
- 19.5 本章小结 464
- 第20章 自动化Web系统的开发与部署 . 466
- 20.1 用Flask快速实现一个网站 . 466
- 20.1.1 概述与安装 466
- 20.1.2 快速实现一个简单的网站系统 467
- 20.1.3 路由编写规则 468
- 20.1.4 请求参数 469
- 20.1.5 响应过程 470
- 20.2 任务系统的开发与部署 . 472
- 20.2.1 系统设计概述 472
- 20.2.2 搭建开发环境 474
- 20.2.3 任务调度系统 477
- 20.2.4 任务执行系统 486
- 20.2.5 系统上线部署 490
- 20.3 本章小结 . 494