第一篇 Python基础知识 3
第1章 初识Python 3
1.1 Python简介 3
1.1.1 什么是Python 3
1.1.2 Python的应用领域 4
1.1.3 如何学好Python 5
1.1.4 Python API文档 6
1.2 搭建Python开发环境 8
1.2.1 安装官方的Python运行环境 9
1.2.2 配置PATH环境变量 11
1.2.3 安装Anaconda Python开发环境 13
1.2.4 下载和安装JDK 13
1.2.5 下载和安装Eclipse 16
1.2.6 Python IDE(PyDev)安装 17
1.2.7 配置Python IDE(PyDev)开发环境 20
1.2.8 测试Python IDE(PyDev)开发环境 21
1.2.9 安装PyCharm 22
1.2.10 配置PyCharm 23
1.2.11 Python中的REPL环境 25
1.3 第一个Python程序 26
1.4 调试Python程序 26
1.5 小结 29
1.6 实战与练习 29
第2章 Python语言基础 30
2.1 Python程序中的基本要素 30
2.1.1 导入Python模块 30
2.1.2 声明变量 32
2.1.3 清空Python控制台 32
2.2 数字 34
2.2.1 基础知识 34
2.2.2 大整数 36
2.2.3 二进制、八进制和十六进制 36
2.2.4 数字的格式化输出 37
2.3 获取用户输入 39
2.4 函数 40
2.5 注释 41
2.6 字符串基础 42
2.6.1 单引号字符串和转义符 42
2.6.2 拼接字符串 43
2.6.3 保持字符串的原汁原味 44
2.6.4 长字符串 46
2.7 小结 47
2.8 实战与练习 47
第3章 条件、循环和其他语句 49
3.1 神奇的print函数 49
3.2 有趣的赋值操作 51
3.3 用缩进创建代码块 53
3.4 条件和条件语句 53
3.4.1 布尔值和布尔变量 54
3.4.2 条件语句(if、else和elif) 55
3.4.3 嵌套代码块 56
3.4.4 比较运算符 57
3.4.5 断言 60
3.5 循环 62
3.5.1 while循环 62
3.5.2 for循环 63
3.5.3 跳出循环 65
3.5.4 循环中的else语句 67
3.6 使用exec和eval执行求值字符串 69
3.7 小结 71
3.8 实战与练习 71
第4章 列表和元组 73
4.1 定义序列 73
4.2 序列的基本操作 74
4.2.1 通过索引操作序列元素 74
4.2.2 分片 77
4.2.3 序列相加 83
4.2.4 序列的乘法 84
4.2.5 检查某个值是否属于一个序列 85
4.2.6 序列的长度、最大值和最小值 86
4.3 列表的基本操作 87
4.4 列表方法 89
4.5 元组 93
4.6 小结 95
4.7 实战与练习 95
第5章 字符串 97
5.1 字符串的基本操作 97
5.2 格式化字符串 98
5.2.1 字符串格式化基础 98
5.2.2 模板字符串 100
5.2.3 字符串的format方法 101
5.2.4 更进一步控制字符串格式化参数 102
5.2.5 字段宽度、精度和千位分隔符 104
5.2.6 符号、对齐、用0填充和进制转换 105
5.3 字符串方法 107
5.3.1 center方法 107
5.3.2 find方法 108
5.3.3 join方法 109
5.3.4 split方法 110
5.3.5 lower方法、upper方法和capwords函数 111
5.3.6 replace方法 112
5.3.7 strip方法 112
5.3.8 translate方法与maketrans方法 113
5.4 小结 114
5.5 实战与练习 115
第6章 字典 116
6.1 为什么要引入字典 116
6.2 创建和使用字典 117
6.2.1 dict函数 117
6.2.2 字典的基本操作 118
6.2.3 字典的格式化字符串 120
6.2.4 序列与迭代 121
6.3 字典方法 124
6.3.1 clear方法 124
6.3.2 copy方法与deepcopy函数 125
6.3.3 fromkeys方法 126
6.3.4 get方法 127
6.3.5 items方法和keys方法 128
6.3.6 pop方法和popitem方法 129
6.3.7 setdefault方法 130
6.3.8 update方法 131
6.3.9 values方法 132
6.4 小结 133
6.5 实战与练习 133
第7章 函数 134
7.1 懒惰是重用的基石 134
7.2 函数基础 136
7.2.1 创建函数 136
7.2.2 为函数添加文档注释 137
7.2.3 没有返回值的函数 138
7.3 函数参数 139
7.3.1 改变参数的值 139
7.3.2 关键字参数与默认值 144
7.3.3 变参数 147
7.3.4 将序列作为函数的参数值 151
7.4 作用域 154
7.5 递归 156
7.6 小结 158
7.7 实战与练习 158
第8章 类和对象 159
8.1 对象的魔法 159
8.2 类 160
8.2.1 创建自己的类 160
8.2.2 方法和私有化 161
8.2.3 类代码块 163
8.2.4 类的继承 164
8.2.5 检测继承关系 165
8.2.6 多继承 167
8.2.7 接口 169
8.3 小结 170
8.4 实战与练习 171
第9章 异常 172
9.1 什么是异常 172
9.2 主动抛出异常 173
9.2.1 raise语句 173
9.2.2 自定义异常类 175
9.3 捕捉异常 176
9.3.1 try…except语句的基本用法 176
9.3.2 捕捉多个异常 177
9.3.3 用同一个代码块处理多个异常 179
9.3.4 捕捉对象 180
9.3.5 异常捕捉中的else子句 182
9.3.6 异常捕捉中的finally子句 183
9.4 异常、函数与栈跟踪 185
9.5 异常的妙用 186
9.6 小结 188
9.7 实战与练习 188
第10章 方法、属性和迭代器 189
10.1 构造方法 189
10.1.1 构造方法的基础知识 189
10.1.2 重写普通方法和构造方法 190
10.1.3 使用super函数 193
10.2 特殊成员方法 194
10.2.1 自定义序列 194
10.2.2 从内建列表、字符串和字典继承 197
10.3 属性 199
10.3.1 传统的属性 199
10.3.2 property函数 201
10.3.3 监控对象中所有的属性 203
10.4 静态方法和类方法 205
10.5 迭代器 207
10.5.1 自定义可迭代的类 207
10.5.2 将迭代器转换为列表 209
10.6 生成器 210
10.6.1 创建生成器 210
10.6.2 递归生成器 212
10.7 小结 213
10.8 实战与练习 214
第二篇 Python高级编程 217
第11章 正则表达式 217
11.1 在Python语言中使用正则表达式 217
11.1.1 使用match方法匹配字符串 217
11.1.2 使用search方法在一个字符串中查找模式 218
11.1.3 匹配多个字符串 219
11.1.4 匹配任何单个字符 220
11.1.5 使用字符集 221
11.1.6 重复、可选和特殊字符 223
11.1.7 分组 226
11.1.8 匹配字符串的起始和结尾以及单词边界 228
11.1.9 使用findall和finditer查找每一次出现的位置 229
11.1.10 用sub和subn搜索与替换 230
11.1.11 使用split分隔字符串 232
11.2 一些常用的正则表达式 232
11.3 小结 233
11.4 实战与练习 234
第12章 常用模块 235
12.1 sys模块 235
12.2 os模块 238
12.2.1 获取与改变工作目录 238
12.2.2 文件与目录操作 239
12.2.3 软链接与硬链接 240
12.2.4 杂项 241
12.3 集合、堆和双端队列(heap模块、deque类) 243
12.3.1 集合 244
12.3.2 堆 247
12.3.3 双端队列 249
12.4 时间、日期与日历(time模块) 250
12.4.1 时间元组 250
12.4.2 格式化日期和时间 251
12.4.3 时间戳的增量 253
12.4.4 计算日期和时间的差值 254
12.4.5 获取某月和某年的日历 255
12.5 随机数(random模块) 256
12.6 数学(math模块) 257
12.7 小结 258
12.8 实战与练习 258
第13章 文件和流 259
13.1 打开文件 259
13.2 操作文件的基本方法 260
13.2.1 读文件和写文件 261
13.2.2 管道输出 262
13.2.3 读行和写行 264
13.3 使用FileInput对象读取文件 265
13.4 小结 266
13.5 实战与练习 266
第14章 数据存储 268
14.1 处理XML格式的数据 268
14.1.1 读取与搜索XML文件 268
14.1.2 字典转换为XML字符串 270
14.1.3 XML字符串转换为字典 272
14.2 处理JSON格式的数据 273
14.2.1 JSON字符串与字典互相转换 273
14.2.2 将JSON字符串转换为类实例 275
14.2.3 将类实例转换为JSON字符串 276
14.2.4 类实例列表与JSON字符串互相转换 277
14.3 将JSON字符串转换为XML字符串 278
14.4 SQLite数据库 279
14.4.1 管理SQLite数据库 279
14.4.2 用Python操作SQLite数据库 281
14.5 MySQL数据库 284
14.6 ORM 286
14.6.1 SQLAlchemy 287
14.6.2 SQLObject 291
14.7 非关系型数据库 294
14.7.1 NoSQL简介 294
14.7.2 MongoDB数据库 295
14.7.3 pymongo模块 296
14.8 小结 297
14.9 实战与练习 297
第15章 TCP与UDP编程 299
15.1 套接字 299
15.1.1 建立TCP服务端 299
15.1.2 服务端接收数据的缓冲区 303
15.1.3 服务端的请求队列 305
15.1.4 TCP时间戳服务端 307
15.1.5 用Socket实现HTTP服务器 307
15.1.6 客户端Socket 311
15.1.7 UDP时间戳服务端 312
15.1.8 UDP时间戳客户端 313
15.2 socketserver模块 314
15.2.1 实现socketserver TCP时间戳服务端 314
15.2.2 实现socketserver TCP时间戳客户端 315
15.3 小结 316
15.4 实战与练习 316
第16章 网络高级编程 317
16.1 urllib3模块 317
16.1.1 发送HTTP GET请求 318
16.1.2 发送HTTP POST请求 319
16.1.3 HTTP请求头 320
16.1.4 HTTP响应头 322
16.1.5 上传文件 323
16.1.6 超时 325
16.2 twisted框架 326
16.2.1 异步编程模型 327
16.2.2 Reactor(反应堆)模式 329
16.2.3 HelloWorld(twisted框架) 329
16.2.4 用twisted实现时间戳客户端 331
16.2.5 用twisted实现时间戳服务端 332
16.2.6 用twisted获取Email邮箱目录列表 333
16.3 FTP客户端 338
16.4 Email客户端 341
16.4.1 使用SMTP发送简单的Email 341
16.4.2 使用SMTP发送带附件的Email 343
16.4.3 使用POP3接收Email 344
16.4.4 使用IMAP4接收Email 346
16.5 小结 348
16.6 实战与练习 348
第17章 多线程 349
17.1 线程与进程 349
17.1.1 进程 349
17.1.2 线程 349
17.2 Python与线程 350
17.2.1 使用单线程执行程序 350
17.2.2 使用多线程执行程序 351
17.2.3 为线程函数传递参数 352
17.2.4 线程和锁 353
17.3 高级线程模块 355
17.3.1 Thread类与线程函数 355
17.3.2 Thread类与线程对象 356
17.3.3 从Thread类继承 357
17.4 线程同步 359
17.4.1 线程锁 359
17.4.2 信号量 361
17.5 生产者—消费者问题与queue模块 364
17.6 小结 366
17.7 实战与练习 366
第18章 GUI库:tkinter 368
18.1 tkinter 简介 368
18.2 编写第一个tkinter程序 368
18.3 布局 370
18.3.1 pack布局 370
18.3.2 place布局 376
18.3.3 grid布局 377
18.4 控件 378
18.4.1 Label控件和Button控件 378
18.4.2 Entry控件与Text控件 380
18.4.3 Radiobutton控件 382
18.4.4 Checkbutton控件 383
18.4.5 Scale控件 384
18.4.6 Listbox控件 386
18.5 向窗口添加菜单 387
18.6 对话框 389
18.7 小结 390
18.8 实战与练习 390
第19章 GUI库:PyQt5 391
19.1 PyQt5简介 391
19.2 安装PyQt5 392
19.2.1 PyQt5开发环境搭建 392
19.2.2 配置QTDesigner(可视化开发) 392
19.2.3 配置PyUIC 395
19.3 编写第一个PyQt5程序 397
19.4 窗口的基本功能 398
19.4.1 设置窗口图标 398
19.4.2 显示提示框 398
19.4.3 关闭窗口 399
19.4.4 消息盒子 400
19.4.5 窗口居中 401
19.5 布局 402
19.5.1 绝对布局 402
19.5.2 盒布局 403
19.5.3 网格布局 405
19.6 控件 406
19.6.1 QPushButton控件 406
19.6.2 QLineEdit控件 408
19.6.3 QCheckBox控件 409
19.6.4 QSlider控件 410
19.6.5 QProgressBar控件 411
19.6.6 QPixmap控件 413
19.6.7 QComboBox控件 414
19.6.8 QCalendarWidget控件 415
19.7 菜单 416
19.8 小结 418
19.9 实战与练习 418
第20章 测试 419
20.1 先测试后编码 419
20.1.1 为代码划定边界 420
20.1.2 测试的步骤 421
20.2 测试工具 421
20.2.1 doctest 421
20.2.2 unittest 423
20.3 检查源代码 424
20.3.1 PyLint 425
20.3.2 Flake8 426
20.4 性能分析 428
20.5 小结 429
20.6 实战与练习 429
第三篇 Python Web开发 433
第21章 Python Web框架:Flask 433
21.1 Flask基础知识 434
21.1.1 使用8行代码搞定Web应用 434
21.1.2 静态路由和动态路由 435
21.1.3 获取HTTP请求数据 438
21.1.4 Response与Cookie 439
21.1.5 会话 441
21.1.6 静态文件和重定向 443
21.2 Jinja2模板 443
21.2.1 第一个基于Jinja2模板的Web应用 444
21.2.2 在Jinja2模板中使用复杂数据 445
21.2.3 在Jinja2模板中的过滤器 447
21.2.4 条件控制 448
21.2.5 循环控制 450
21.2.6 宏操作 452
21.2.7 include指令 455
21.2.8 模板继承 457
21.2.9 使用flask-bootstrap模块集成Twitter Bootstrap 458
21.2.10 自定义错误页面 460
21.3 Web表单与Flask-WTF扩展 461
21.3.1 表单类 462
21.3.2 简单的表单组件 464
21.3.3 单选和多选组件 467
21.3.4 表单校验器 469
21.3.5 获取和设置表单组件中的数据 472
21.4 小结 473
21.5 实战与练习 474
第22章 Python Web框架:Django 475
22.1 Django开发环境搭建 475
22.2 Django基础知识 476
22.2.1 建立第一个Django工程 476
22.2.2 Django工程结构分析 477
22.2.3 远程访问与端口号 477
22.2.4 用PyCharm建立Django工程 478
22.2.5 添加路由 480
22.2.6 在MyCharm中指定IP和端口号 482
22.2.7 处理HTTP请求 482
22.2.8 Response与Cookie 484
22.2.9 读写Session 485
22.2.10 用户登录 487
22.2.11 静态文件 488
22.3 Django模板 490
22.3.1 编写第一个基于Django模板的应用 490
22.3.2 条件控制标签 492
22.3.3 循环控制标签 493
22.3.4 过滤器 494
22.4 小结 496
22.5 实战与练习 496
第四篇 Python科学计算与数据分析 499
第23章 科学计算库:NumPy 499
23.1 NumPy开发环境搭建 499
23.2 第一个NumPy程序 500
23.3 NumPy数组 501
23.3.1 创建多维数组 501
23.3.2 获取数组值和数组的分片 502
23.3.3 改变数组的维度 502
23.3.4 水平组合数组 503
23.3.5 垂直数组组合 505
23.3.6 水平分隔数组 505
23.3.7 垂直分隔数组 507
23.3.8 将数组转换为Python列表 508
23.4 NumPy常用函数 509
23.4.1 存取NumPy数组 509
23.4.2 读写CSV文件 510
23.4.3 成交量加权平均价格 511
23.4.4 数组的最大值、最小值和取值范围 512
23.4.5 计算数组的中位数和方差 513
23.4.6 计算两只股票的相关性 514
23.5 小结 515
23.6 实战与练习 515
第24章 数据可视化库:Matplotlib 516
24.1 Matplotlib开发环境搭建 516
24.2 基础知识 517
24.2.1 第一个Matplotlib程序 517
24.2.2 绘制正弦曲线和余弦曲线 518
24.2.3 绘制随机点 519
24.2.4 绘制柱状图 520
24.2.5 绘制直方图与盒状图 521
24.2.6 绘制饼图 523
24.3 定制颜色和样式 524
24.3.1 定制曲线的颜色 524
24.3.2 定制离散点的样式 525
24.3.3 定制柱状图颜色 526
24.3.4 定制饼图颜色 526
24.3.5 定制曲线类型 527
24.3.6 定制柱状图的填充模式 528
24.4 注释 529
24.4.1 在坐标系上显示标题 529
24.4.2 使用LaTex格式的标题 529
24.4.3 为X轴和Y轴添加注释 530
24.4.4 在坐标系指定位置放置注释 531
24.4.5 为文本注释添加Box 532
24.5 小结 532
24.6 实战与练习 533
第25章 数据分析库:Pandas 534
25.1 Pandas开发环境搭建 534
25.2 样本数据集 534
25.3 Pandas基础知识 535
25.3.1 数据集的装载与基础操作 535
25.3.2 查看数据集中的列 536
25.3.3 查看数据集的行 537
25.3.4 查看数据集单元格中的数据 538
25.3.5 对数据集进行分组统计 539
25.3.6 可视化统计数据 540
25.4 Pandas数据类型 541
25.4.1 创建Series 541
25.4.2 创建DataFrame 542
25.4.3 Series的基本操作 543
25.4.4 Series的方法 544
25.4.5 Series的条件过滤 545
25.4.6 DataFrame的条件过滤 546
25.5 小结 547
25.6 实战与练习 548
第五篇 Python Web爬虫技术 551
第26章 网络爬虫与Beautiful Soup 551
26.1 网络爬虫基础 551
26.1.1 爬虫分类 552
26.1.2 编写第1个网络爬虫 552
26.1.3 保存抓取的数据 555
26.1.4 从百度抓取海量比基尼美女图片 557
26.2 HTML分析库:Beautiful Soup 560
26.2.1 如何使用Beautiful Soup 560
26.2.2 Tag对象的name和string属性 562
26.2.3 读写标签属性 563
26.2.4 用Beautiful Soup分析京东首页的HTML代码 564
26.2.5 通过回调函数过滤标签 565
26.3 支持下载队列的多线程网络爬虫 566
26.4 小结 568
26.5 实战与练习 568
第27章 网络爬虫框架:Scrapy 570
27.1 Scrapy基础知识 570
27.1.1 Scrapy简介 570
27.1.2 Scrapy安装 571
27.1.3 Scrapy Shell抓取Web资源 571
27.1.4 XPath入门 573
27.2 用Scrapy编写网络爬虫 574
27.2.1 创建和使用Scrapy工程 574
27.2.2 在PyCharm中使用Scrapy 575
27.2.3 使用Scrapy抓取数据并通过XPath指定解析规则 576
27.2.4 将抓取到的数据保存为多种格式的文件 577
27.3 小结 578
27.4 实战与练习 578
第六篇 Python项目实战 581
第28章 Web项目实战:基于Flask的美团网 581
28.1 项目概述 581
28.1.1 项目效果演示 581
28.1.2 项目工程结构 582
28.2 美团网核心功能实现 583
28.2.1 设计服务API 583
28.2.2 用Ajax技术与服务端交互 584
28.3 Python与微信支付 585
28.3.1 微信支付要准备的数据以及支付流程 585
28.3.2 编写支付核心类WXPay 586
28.4 小结 588
第29章 Web项目实战:基于Django的58同城 589
29.1 项目效果演示 589
29.2 操作MySQL数据库 590
29.3 账号 590
29.3.1 用户注册 591
29.3.2 用户登录 592
29.4 招聘页面 594
29.5 二手车页面 595
29.6 小结 597
第30章 网络爬虫实战:天气预报服务API 598
30.1 项目效果演示 598
30.2 建立MySQL数据库 599
30.3 抓取天气预报数据 599
30.4 编写天气预报服务API 600
30.5 实现Web版天气预报查询客户端 601
30.6 小结 601
第31章 爬虫项目实战:胸罩销售数据分析 602
31.1 项目效果演示 602
31.2 天猫胸罩销售数据 604
31.2.1 天猫胸罩销售数据分析 604
31.2.2 抓取天猫胸罩销售数据 605
31.2.3 抓取胸罩商品列表 605
31.2.4 将抓取的销售数据保存到SQLite数据库中 606
31.3 京东胸罩销售数据 607
31.3.1 京东胸罩销售数据分析 607
31.3.2 抓取京东胸罩销售数据 608
31.4 数据清洗 609
31.5 数据分析与可视化 611
31.5.1 用SQL语句分析胸罩(按罩杯尺寸)的销售比例 611
31.5.2 用Pandas和Matplotlib对胸罩销售比例进行可视化分析 612
31.5.3 按上胸围分析胸罩的销售比例 613
31.5.4 罩杯和上胸围综合数据可视化分析 614
31.5.5 统计哪一种颜色的胸罩卖得最好 615
31.5.6 用盒状图与直方图表示罩杯与上胸围分布 617
31.6 小结 618
第32章 GUI项目实战:动态修改域名指向的IP 619
32.1 搭建开发环境 619
32.2 项目效果演示 619
32.3 获取公网IP 620
32.4 定时更新公网IP 621
32.5 更新域名对应的IP 622
32.6 小结 623
第33章 游戏项目实战:俄罗斯方块 624
33.1 搭建开发环境 624
33.2 项目效果演示 624
33.3 用户注册 625
33.4 用户登录 626
33.5 游戏界面绘制和渲染 628
33.6 用按键控制游戏 629
33.7 播放背景音乐 630
33.8 用户积分 631
33.9 小结 632