第1章 Python概述 1
1.1 初识Python语言 1
1.1.1 Python语言简介 1
1.1.2 Python语言的特点 1
1.1.3 Python语言的应用范围 2
1.2 Python语言版本和开发环境 2
1.2.1 Python语言的版本 2
1.2.2 Python语言的实现 2
1.2.3 Python语言的集成开发环境 3
1.3 下载和安装Python 3
1.3.1 下载Python 3
1.3.2 安装Python 4
1.3.3 安装和管理Python扩展包 4
1.4 使用Python解释器解释执行Python程序 6
1.4.1 运行Python解释器 6
1.4.2 运行Python集成开发环境 7
1.5 使用文本编辑器和命令行编写和执行Python源文件程序 8
1.5.1 编写输出“Hello,World!”的程序 8
1.5.2 输出“Hello,World!”程序的源代码分析 9
1.5.3 运行Python源代码程序 9
1.5.4 命令行参数 10
1.6 使用集成开发环境IDLE编写和执行Python源文件程序 11
1.6.1 使用IDLE编写程序 11
1.6.2 使用IDLE编辑程序 12
1.7 在线帮助和相关资源 12
1.7.1 Python交互式帮助系统 12
1.7.2 Python文档 14
1.7.3 Python官网 15
1.7.4 Python扩展库索引 15
1.8 复习题 16
1.9 上机实践 17
1.10 案例研究:安装和使用其他Python环境 17
第2章 Python语言基础 18
2.1 Python程序概述 18
2.1.1 引例 18
2.1.2 Python程序的构成 18
2.2 Python对象和引用 19
2.2.1 Python对象概述 19
2.2.2 使用字面量创建实例对象 19
2.2.3 使用类对象创建实例对象 20
2.2.4 数据类型 20
2.2.5 变量和对象的引用 20
2.2.6 Python是动态类型语言 21
2.2.7 Python是强类型语言 21
2.2.8 对象内存示意图 22
2.2.9 对象的值比较和引用判别 22
2.2.10 不可变对象和可变对象 23
2.3 标识符及其命名规则 23
2.3.1 标识符 23
2.3.2 保留关键字 24
2.3.3 Python预定义标识符 24
2.3.4 命名规则 25
2.4 变量和赋值语句 25
2.4.1 变量的声明和赋值 25
2.4.2 链式赋值语句 25
2.4.3 复合赋值语句 26
2.4.4 删除变量 26
2.4.5 序列解包赋值 26
2.4.6 常量 27
2.5 表达式和运算符 27
2.5.1 表达式的组成 27
2.5.2 表达式的书写规则 28
2.5.3 运算符概述 28
2.5.4 Python运算符 28
2.6 语句 29
2.6.1 Python语句 29
2.6.2 Python语句的书写规则 29
2.6.3 复合语句及其缩进书写规则 30
2.6.4 注释语句 30
2.6.5 空语句 31
2.7 函数和模块 31
2.7.1 函数的创建和调用 31
2.7.2 内置函数 32
2.7.3 模块函数 32
2.7.4 函数API 32
2.8 类和对象 33
2.8.1 创建类对象 33
2.8.2 实例对象的创建和调用 33
2.9 模块和包 33
2.10 复习题 34
2.11 上机实践 36
2.12 案例研究:使用Pillow库处理图像文件 36
第3章 程序流程控制 38
3.1 顺序结构 38
3.2 选择结构 38
3.2.1 分支结构的形式 39
3.2.2 单分支结构 39
3.2.3 双分支结构 40
3.2.4 多分支结构 40
3.2.5 if语句的嵌套 42
3.2.6 if语句的典型示例代码 43
3.2.7 选择结构综合举例 43
3.3 循环结构 44
3.3.1 可迭代对象 44
3.3.2 range对象 45
3.3.3 for循环 45
3.3.4 while循环 45
3.3.5 循环的嵌套 47
3.3.6 break语句 47
3.3.7 continue语句 48
3.3.8 死循环 49
3.3.9 else子句 49
3.3.10 enumerate()函数和循环 50
3.3.11 zip()函数和循环 50
3.3.12 map()函数和循环 51
3.3.13 循环语句的典型示例代码 51
3.3.14 循环结构综合举例 52
3.4 复习题 53
3.5 上机实践 55
3.6 案例研究:使用嵌套循环实现图像处理算法 58
第4章 常用内置数据类型 59
4.1 Python内置数据类型概述 59
4.1.1 数值数据类型 59
4.1.2 序列数据类型 59
4.1.3 集合数据类型 60
4.1.4 字典数据类型 60
4.1.5 NoneType、NotImplementedType和EllipsisType 60
4.1.6 其他数据类型 60
4.2 int类型 60
4.2.1 整型字面量 61
4.2.2 int对象 61
4.2.3 int对象的方法 61
4.2.4 整数的运算 62
4.3 float类型 62
4.3.1 浮点类型字面量 63
4.3.2 float对象 63
4.3.3 float对象的方法 63
4.3.4 浮点数的运算 64
4.4 complex类型 64
4.4.1 复数类型字面量 64
4.4.2 complex对象 65
4.4.3 complex对象的属性和方法 65
4.4.4 复数的运算 65
4.5 bool类型 66
4.5.1 布尔值字面量 66
4.5.2 bool对象 66
4.5.3 逻辑运算符 66
4.6 str类型 67
4.6.1 字符串字面量 67
4.6.2 字符串编码 67
4.6.3 转义字符 68
4.6.4 str对象 68
4.6.5 str对象的属性和方法 69
4.6.6 字符串的运算 69
4.6.7 对象转换为字符串 69
4.6.8 字符串的格式化 69
4.6.9 格式化字符串变量 70
4.7 比较关系运算和条件表达式 70
4.7.1 条件表达式 70
4.7.2 关系和测试运算符 71
4.8 算术运算符和位运算符 72
4.8.1 算术运算符 72
4.8.2 位运算符 72
4.9 混合运算和数值类型转换 73
4.9.1 隐式转换 73
4.9.2 显式转换 73
4.10 内置标准数学函数 74
4.10.1 内置数学运算函数 74
4.10.2 数制转换函数 74
4.11 复习题 74
4.12 上机实践 77
4.13 案例研究:科学计算和数据分析 81
第5章 序列数据类型 82
5.1 Python序列数据概述 82
5.1.1 数组 82
5.1.2 Python内置的序列数据类型 82
5.2 序列数据的基本操作 83
5.2.1 序列的长度、最大值、最小值、求和 83
5.2.2 序列的索引访问操作 83
5.2.3 序列的切片操作 84
5.2.4 序列的连接和重复操作 85
5.2.5 序列的成员关系操作 85
5.2.6 序列的比较运算操作 86
5.2.7 序列的排序操作 86
5.2.8 内置函数all()和any() 86
5.2.9 序列的拆分 87
5.3 元组 87
5.3.1 使用元组字面量创建元组实例对象 87
5.3.2 使用tuple对象创建元组实例对象 88
5.3.3 元组的序列操作 88
5.4 列表 88
5.4.1 使用列表字面量创建列表实例对象 88
5.4.2 使用list对象创建列表实例对象 88
5.4.3 列表的序列操作 89
5.4.4 list对象的方法 89
5.4.5 列表解析表达式 90
5.5 字符串 90
5.5.1 字符串的序列操作 90
5.5.2 字符串编码 90
5.5.3 字符串的格式化 91
5.6 字节序列 93
5.6.1 bytes常量 93
5.6.2 创建bytes对象 94
5.6.3 创建bytearray对象 94
5.6.4 bytes和bytearray的序列操作 95
5.6.5 字节编码和解码 95
5.7 复习题 95
5.8 上机实践 98
5.9 案例研究:猜单词游戏 98
第6章 输入和输出 100
6.1 输入和输出概述 100
6.2 命令行参数 100
6.2.1 sys.argv与命令行参数 100
6.2.2 argparse模块和命令行参数解析 101
6.3 标准输入和标准输出函数 102
6.3.1 输入和输出函数 102
6.3.2 交互式用户输入 103
6.3.3 运行时提示输入密码 103
6.4 文件和文件对象 104
6.4.1 文件对象和open()函数 104
6.4.2 文件的打开、写入、读取和关闭 104
6.4.3 with语句和上下文管理协议 105
6.5 标准输入、输出和错误流 106
6.5.1 标准输入、输出和错误流文件对象 106
6.5.2 读取任意长度的输入流 106
6.5.3 标准输入、输出和错误流重定向 107
6.6 重定向和管道 107
6.6.1 重定向标准输出到一个文件 108
6.6.2 重定向文件到标准输入 108
6.6.3 管道 109
6.6.4 过滤器 110
6.7 复习题 111
6.8 上机实践 112
6.9 案例研究:21点扑克牌游戏 112
第7章 错误和异常处理 113
7.1 程序的错误 113
7.1.1 语法错误 113
7.1.2 运行时错误 113
7.1.3 逻辑错误 114
7.2 异常处理 115
7.2.1 异常处理概述 115
7.2.2 内置的异常类 115
7.2.3 引发异常 116
7.2.4 捕获处理异常机制概述 117
7.2.5 Python虚拟机捕获处理异常 117
7.2.6 使用try…except…else…finally语句捕获处理异常 117
7.2.7 捕获异常的顺序 118
7.2.8 finally块和发生异常后的处理 118
7.2.9 自定义异常类 119
7.3 断言处理 119
7.3.1 断言处理概述 119
7.3.2 assert语句和AssertionError类 120
7.3.3 启用/禁用断言 120
7.4 程序的基本调试方法 121
7.4.1 语法错误的调试 121
7.4.2 运行时错误的调试 121
7.4.3 逻辑错误的调试 121
7.5 使用logging模块输入日志 122
7.5.1 logging模块概述 122
7.5.2 logging的配置和使用 123
7.6 复习题 125
7.7 上机实践 126
7.8 案例研究:使用调试器调试Python程序 127
第8章 函数和函数式编程 128
8.1 函数概述 128
8.1.1 函数的基本概念 128
8.1.2 函数的功能 128
8.1.3 Python中函数的分类 128
8.2 函数的声明和调用 129
8.2.1 函数对象的创建 129
8.2.2 函数的调用 129
8.2.3 函数的副作用 130
8.3 参数的传递 131
8.3.1 形式参数和实际参数 131
8.3.2 形式参数变量和对象引用传递 132
8.3.3 传递不可变对象的引用 132
8.3.4 传递可变对象的引用 132
8.3.5 可选参数 133
8.3.6 位置参数和命名参数 133
8.3.7 可变参数 134
8.3.8 强制命名参数 135
8.3.9 参数类型检查 135
8.4 函数的返回值 136
8.4.1 return语句和函数返回值 136
8.4.2 多条return语句 136
8.4.3 返回多个值 137
8.5 变量的作用域 137
8.5.1 全局变量 137
8.5.2 局部变量 138
8.5.3 全局语句global 138
8.5.4 非局部语句nonlocal 139
8.5.5 类成员变量 140
8.5.6 输出局部变量和全局变量 140
8.6 递归函数 140
8.6.1 递归函数的定义 140
8.6.2 递归函数的原理 141
8.6.3 编写递归函数时需要注意的问题 142
8.6.4 递归函数的应用:最大公约数 142
8.6.5 递归函数的应用:汉诺塔 143
8.7 内置函数的使用 144
8.7.1 内置函数一览 144
8.7.2 eval()函数 144
8.7.3 exec()函数 145
8.7.4 compile()函数 145
8.8 Python函数式编程基础 145
8.8.1 作为对象的函数 145
8.8.2 高阶函数 145
8.8.3 map()函数 146
8.8.4 filter()函数 146
8.8.5 Lambda表达式和匿名函数 146
8.8.6 operator模块和操作符函数 147
8.8.7 functools.reduce()函数 148
8.8.8 偏函数 148
8.8.9 sorted()函数 148
8.8.10 函数装饰器 149
8.9 复习题 150
8.10 上机实践 152
8.11 案例研究:井字棋游戏 152
第9章 面向对象的程序设计 153
9.1 面向对象概念 153
9.1.1 对象的定义 153
9.1.2 封装 153
9.1.3 继承 153
9.1.4 多态性 153
9.2 类对象和实例对象 154
9.2.1 类对象 154
9.2.2 实例对象 154
9.3 属性 155
9.3.1 实例对象属性 155
9.3.2 类对象属性 156
9.3.3 私有属性和公有属性 156
9.3.4 @property装饰器 157
9.3.5 特殊属性 158
9.3.6 自定义属性 159
9.4 方法 159
9.4.1 对象实例方法 159
9.4.2 静态方法 160
9.4.3 类方法 161
9.4.4 __init__()方法和__new__()方法 162
9.4.5 __del__()方法 162
9.4.6 私有方法与公有方法 163
9.4.7 方法的重载 164
9.5 继承 165
9.5.1 派生类 165
9.5.2 查看继承的层次关系 165
9.5.3 类成员的继承和重写 166
9.6 对象的特殊方法 166
9.6.1 对象的特殊方法概述 166
9.6.2 运算符重载与对象的特殊方法 167
9.6.3 @functools.total_ordering装饰器 169
9.6.4 __call__()方法和可调用对象 169
9.7 对象的引用、浅拷贝和深拷贝 170
9.7.1 对象的引用 170
9.7.2 对象的浅拷贝 170
9.7.3 对象的深拷贝 170
9.8 可迭代对象:迭代器和生成器 171
9.8.1 可迭代对象 171
9.8.2 迭代器 171
9.8.3 迭代器协议 171
9.8.4 可迭代对象的迭代:iter()函数和next()函数 172
9.8.5 可迭代对象的迭代:for语句 172
9.8.6 自定义可迭代对象和迭代器 172
9.8.7 生成器函数 173
9.8.8 反向迭代:reversed迭代器 174
9.8.9 生成器表达式 174
9.8.10 range可迭代对象 175
9.8.11 map迭代器和itertools.starmap迭代器 175
9.8.12 filter迭代器和itertools.filterfalse迭代器 175
9.8.13 zip迭代器和itertools.zip_longest迭代器 176
9.8.14 enumerate迭代器 176
9.8.15 无穷序列迭代器itertools.count、cycle和repeat 177
9.8.16 累计迭代器itertools.accumulate 177
9.8.17 级联迭代器itertools.chain 177
9.8.18 选择压缩迭代器itertools.compress 178
9.8.19 截取迭代器itertools.dropwhile和takewhile 178
9.8.20 切片迭代器itertools.islice 178
9.8.21 分组迭代器itertools.groupby 178
9.8.22 返回多个迭代器itertools.tee 179
9.8.23 组合迭代器itertools.combinations和combinations_with_replacement 179
9.8.24 排列迭代器itertools.permutations 179
9.8.25 笛卡儿积迭代器itertools.product 180
9.9 自定义类应用举例 180
9.9.1 Color类 180
9.9.2 Histogram类 181
9.10 复习题 183
9.11 上机实践 184
9.12 案例研究:文本相似度比较分析 184
第10章 模块和客户端 185
10.1 模块化程序设计的概念 185
10.1.1 模块化程序设计 185
10.1.2 模块的API 185
10.1.3 模块的实现 186
10.1.4 模块的客户端 187
10.1.5 模块化程序设计的优越性 187
10.2 模块的设计和实现 187
10.2.1 模块设计的一般原则 187
10.2.2 API设计 188
10.2.3 创建模块 188
10.2.4 模块的私有函数 189
10.2.5 模块的测试代码 189
10.2.6 编写模块文档字符串 190
10.2.7 按字节编译的.pyc文件 191
10.3 模块的导入和使用 191
10.3.1 导入模块和使用模块 191
10.3.2 导入模块中的成员 191
10.3.3 重新加载模块 192
10.3.4 动态导入模块 192
10.4 包 192
10.4.1 包的概念 192
10.4.2 创建包 193
10.4.3 包的导入和使用 193
10.5 模块的导入顺序 194
10.5.1 导入模块时的搜索顺序 194
10.5.2 模块搜索路径 195
10.5.3 dir()函数 195
10.6 名称空间与名称查找顺序 196
10.6.1 名称空间概述 196
10.6.2 名称查找顺序 196
10.6.3 顶层模块和__name__变量 196
10.6.4 Python解释器 197
10.6.5 全局名称空间 197
10.6.6 局部名称空间 198
10.6.7 类和对象名称空间 199
10.7 复习题 199
10.8 上机实践 199
10.9 案例研究:基于模块的库存管理系统 200
第11章 算法与数据结构基础 201
11.1 算法及其性能分析 201
11.1.1 算法概述 201
11.1.2 算法的时间复杂度分析 201
11.1.3 增长量级 202
11.1.4 算法的空间复杂度分析 203
11.2 查找算法 203
11.2.1 顺序查找法 203
11.2.2 二分查找法 204
11.2.3 Python语言提供的查找算法 205
11.3 排序算法 206
11.3.1 冒泡排序法 206
11.3.2 选择排序法 207
11.3.3 插入排序法 208
11.3.4 归并排序法 209
11.3.5 快速排序法 210
11.3.6 Python语言提供的排序算法 211
11.4 常用数据结构 211
11.4.1 数据结构概述 211
11.4.2 常用数据结构概述 212
11.4.3 Python中的collections模块 212
11.5 数组 212
11.5.1 列表和数组 212
11.5.2 array.array对象和数组 213
11.6 栈和队列 214
11.6.1 栈的实现:使用列表 214
11.6.2 deque对象 214
11.6.3 deque作为栈 215
11.6.4 deque作为队列 215
11.7 集合 216
11.7.1 集合的定义 216
11.7.2 集合解析表达式 216
11.7.3 判断集合元素是否存在 217
11.7.4 集合的运算:并集、交集、差集和对称差集 217
11.7.5 集合的比较运算:相等、子集和超集 218
11.7.6 集合的长度、最大值、最小值、元素和 218
11.7.7 可变集合的方法 218
11.8 字典 219
11.8.1 对象的哈希值 219
11.8.2 字典的定义 219
11.8.3 字典的访问操作 220
11.8.4 字典的视图对象 220
11.8.5 字典的遍历 220
11.8.6 字典解析表达式 221
11.8.7 判断字典键是否存在 221
11.8.8 字典对象的长度和比较 221
11.8.9 字典对象的方法 222
11.8.10 defaultdict对象 222
11.8.11 OrderedDict对象 223
11.8.12 ChainMap对象 223
11.8.13 Counter对象 224
11.9 collections模块的其他数据结构 225
11.9.1 namedtuple对象 225
11.9.2 UserDict、UserList和UserString对象 226
11.10 应用举例 226
11.10.1 去除列表中的重复项 226
11.10.2 基于字典的通讯录 227
11.11 复习题 228
11.12 上机实践 231
11.13 案例研究:程序运行时间度量分析 232
第12章 图形用户界面 233
12.1 图形用户界面概述 233
12.1.1 tkinter 233
12.1.2 其他GUI库简介 233
12.2 tkinter概述 234
12.2.1 tkinter模块 234
12.2.2 图形用户界面的构成 234
12.2.3 框架和GUI应用程序类 235
12.2.4 tkinter主窗口 235
12.3 几何布局管理器 236
12.3.1 pack几何布局管理器 236
12.3.2 grid几何布局管理器 237
12.3.3 place几何布局管理器 238
12.4 事件处理 239
12.4.1 事件类型 239
12.4.2 事件绑定 239
12.4.3 事件处理函数 240
12.5 常用组件 240
12.5.1 Label 240
12.5.2 LabelFrame 241
12.5.3 Button 241
12.5.4 Message 243
12.5.5 Entry 243
12.5.6 Text 243
12.5.7 Radiobutton 245
12.5.8 Checkbutton 245
12.5.9 Listbox 247
12.5.10 OptionMenu 248
12.5.11 Scale 250
12.5.12 Toplevel 250
12.5.13 ttk子模块控件 251
12.6 对话框 251
12.6.1 通用消息对话框 252
12.6.2 文件对话框 253
12.6.3 颜色选择对话框 253
12.6.4 通用对话框应用举例 254
12.6.5 简单对话框 255
12.7 菜单和工具栏 256
12.7.1 创建主菜单 257
12.7.2 创建上下文菜单 258
12.7.3 菜单应用举例 259
12.8 基于wxPython的图形用户界面设计入门 261
12.8.1 wxPython概述 261
12.8.2 安装wxPython库 261
12.8.3 wxPython应用程序的基本架构 261
12.8.4 使用wxPython开发简易文本编辑器 262
12.9 复习题 263
12.10 上机实践 265
12.11 案例研究:简易图形用户界面计算器 265
第13章 图形绘制 266
13.1 Python绘图模块概述 266
13.2 基于tkinter的图形绘制 267
13.2.1 基于tkinter的画布绘图概述 267
13.2.2 创建画布对象 267
13.2.3 绘制矩形 267
13.2.4 绘制椭圆 268
13.2.5 绘制圆弧 268
13.2.6 绘制线条 269
13.2.7 绘制多边形 269
13.2.8 绘制字符串 270
13.2.9 应用举例:绘制函数图形 270
13.3 基于turtle模块的海龟绘图 271
13.3.1 海龟绘图概述 271
13.3.2 turtle模块概述 271
13.3.3 绘制正方形 272
13.3.4 绘制多边形 272
13.3.5 绘制圆形螺旋 273
13.3.6 递归图形 273
13.3.7 海龟绘图的应用实例 274
13.4 基于Matplotlib模块的绘图 275
13.4.1 Matplotlib模块概述 275
13.4.2 安装Matplotlib模块 275
13.4.3 使用Matplotlib模块绘图概述 276
13.4.4 绘制函数曲线 276
13.4.5 绘制多个图形 276
13.4.6 绘制直方图 277
13.5 复习题 278
13.6 上机实践 278
13.7 案例研究:汉诺塔问题求解动画 280
第14章 数值日期和时间处理 281
14.1 相关模块概述 281
14.1.1 数值处理的相关模块 281
14.1.2 日期和时间处理的相关模块 281
14.2 math模块和数学函数 281
14.2.1 math模块的API 281
14.2.2 math模块应用举例 284
14.3 cmath模块和复数数学函数 285
14.4 random模块和随机函数 286
14.4.1 种子和随机状态 286
14.4.2 随机整数 286
14.4.3 随机序列 287
14.5 数值运算模块NumPy 288
14.5.1 数值运算模块的基本使用 288
14.5.2 创建数组 289
14.5.3 处理数组 289
14.5.4 数组应用举例 290
14.6 日期和时间处理 290
14.6.1 相关术语 290
14.6.2 时间对象 291
14.6.3 测量程序运行时间 291
14.6.4 日期对象 292
14.6.5 获取当前日期时间 292
14.6.6 日期时间格式化为字符串 292
14.6.7 日期时间字符串解析为日期时间对象 293
14.7 应用举例 293
14.7.1 蒙特卡洛模拟:赌徒破产命运 293
14.7.2 使用随机数估值圆周率 295
14.7.3 程序运行时间测量 295
14.8 复习题 296
14.9 上机实践 297
14.10 案例研究:使用pandas进行数据分析和处理 298
第15章 字符串和文本处理 299
15.1 相关模块概述 299
15.1.1 字符串和文本处理的相关模块 299
15.1.2 字符串处理的常用方法 299
15.2 字符串处理的常用操作 299
15.2.1 字符串的类型判断 299
15.2.2 字符串的大小写转换 300
15.2.3 字符串的填充、空白和对齐 300
15.2.4 字符串的测试、查找和替换 301
15.2.5 字符串的拆分和组合 301
15.2.6 字符串的翻译和转换 302
15.2.7 字符串应用举例 302
15.3 正则表达式 303
15.3.1 正则表达式语言概述 303
15.3.2 正则表达式引擎 304
15.3.3 普通字符和转义字符 304
15.3.4 字符类和预定义字符类 304
15.3.5 边界匹配符 305
15.3.6 重复限定符 305
15.3.7 匹配算法:贪婪和懒惰 306
15.3.8 选择分支 307
15.3.9 分组和向后引用 307
15.3.10 正则表达式的匹配模式 309
15.3.11 常用正则表达式 309
15.4 正则表达式模块re 309
15.4.1 匹配和搜索函数 309
15.4.2 匹配选项 310
15.4.3 正则表达式对象 310
15.4.4 匹配对象 311
15.4.5 匹配和替换 311
15.4.6 分隔字符串 312
15.5 正则表达式应用举例 312
15.5.1 字符串包含验证 312
15.5.2 字符串的查找和拆分 312
15.5.3 字符串的替换和清除 313
15.5.4 字符串的查找和截取 313
15.6 应用举例 314
15.6.1 文本统计 314
15.6.2 基因预测 315
15.6.3 字符串的简单加密和解密 315
15.7 复习题 316
15.8 上机实践 318
15.9 案例研究:NLTK与自然语言处理 319
第16章 文件和数据交换 320
16.1 文件操作相关模块概述 320
16.2 文本文件的读取和写入 320
16.2.1 文本文件的写入 320
16.2.2 文本文件的读取 321
16.2.3 文本文件的编码 322
16.3 二进制文件的读取和写入 322
16.3.1 二进制文件的写入 323
16.3.2 二进制文件的读取 323
16.4 随机文件访问 324
16.5 内存文件的操作 325
16.5.1 StringIO和内存文本文件的操作 325
16.5.2 BytesIO和内存二进制文件的操作 325
16.6 文件的压缩和解压缩 326
16.7 CSV格式文件的读取和写入 326
16.7.1 csv.reader对象和CSV文件的读取 327
16.7.2 csv.writer对象和CSV文件的写入 327
16.7.3 csv.DictReader对象和CSV文件的读取 328
16.7.4 csv.DictWriter对象和CSV文件的写入 328
16.7.5 CSV文件格式化参数和Dialect对象 329
16.8 输入重定向和管道 330
16.8.1 FileInput对象 330
16.8.2 fileinput模块的函数 331
16.8.3 输入重定向 331
16.9 对象序列化 332
16.9.1 对象序列化概述 332
16.9.2 pickle模块和对象序列化 333
16.9.3 json模块和JSON格式数据 333
16.10 复习题 334
16.11 上机实践 335
16.12 案例研究:百度音乐批量下载器 335
第17章 数据库访问 336
17.1 数据库基础 336
17.1.1 数据库的概念 336
17.1.2 关系数据库 336
17.2 Python数据库访问模块 337
17.2.1 通用数据库访问模块 337
17.2.2 专用数据库访问模块 338
17.2.3 SQLite数据库和sqlite3模块 338
17.3 使用sqlite3模块连接和操作SQLite数据库 339
17.3.1 访问数据库的步骤 339
17.3.2 创建数据库和表 340
17.3.3 数据库表的插入、更新和删除操作 341
17.3.4 数据库表的查询操作 341
17.4 使用SQLiteStudio查看和维护SQLite数据库 342
17.5 复习题 342
17.6 上机实践 343
17.7 案例研究:基于数据库和GUI的教务管理系统 343
第18章 网络编程和通信 344
18.1 网络编程的基本概念 344
18.1.1 网络基础知识 344
18.1.2 TCP/IP协议简介 344
18.1.3 IP地址和域名 345
18.1.4 统一资源定位器 346
18.2 基于socket的网络编程 346
18.2.1 socket概述 346
18.2.2 创建socket对象 348
18.2.3 将服务器端socket绑定到指定地址 348
18.2.4 服务器端socket开始侦听 349
18.2.5 连接和接收连接 349
18.2.6 发送和接收数据 349
18.2.7 简单TCP程序:Echo Server 350
18.2.8 简单UDP程序:Echo Server 351
18.2.9 UDP程序:Quote Server 352
18.3 基于urllib的网络编程 353
18.3.1 打开和读取URL网络资源 353
18.3.2 创建Request对象 353
18.4 基于http的网络编程 354
18.5 基于ftplib的网络编程 354
18.5.1 创建FTP对象 354
18.5.2 创建FTP_TLS对象 355
18.6 基于poplib和smtplib的网络编程 356
18.6.1 使用poplib接收邮件 356
18.6.2 使用smtplib发送邮件 357
18.7 复习题 357
18.8 上机实践 358
18.9 案例研究:网络爬虫案例 358
第19章 并行计算:进程、线程和协程 359
19.1 并行处理概述 359
19.1.1 进程、线程和协程 359
19.1.2 Python语言与并行处理相关模块 360
19.2 基于线程的并发处理 360
19.2.1 threading模块概述 360
19.2.2 使用Thread对象创建线程 361
19.2.3 自定义派生于Thread的对象 361
19.2.4 线程加入 362
19.2.5 用户线程和daemon线程 363
19.2.6 Timer线程 364
19.2.7 基于原语锁的简单同步 364
19.2.8 基于条件变量的同步和通信 366
19.2.9 基于queue模块中队列的同步 368
19.2.10 基于Event的同步和通信 369
19.3 基于进程的并行计算 370
19.3.1 multiprocessing模块概述 370
19.3.2 创建和使用进程 370
19.3.3 进程的数据共享 371
19.3.4 进程池 372
19.4 基于线程池/进程池的并发和并行任务 374
19.4.1 concurrent.futures模块概述 374
19.4.2 使用ThreadPoolExecutor并发执行任务 374
19.4.3 使用ProcessPoolExecutor并发执行任务 375
19.5 基于asyncio的异步IO编程 376
19.5.1 asyncio模块概述 376
19.5.2 创建协程对象 376
19.5.3 创建任务对象 377
19.6 应用举例 378
19.6.1 使用Pool并行计算查找素数 378
19.6.2 使用ProcessPoolExecutor并行判断素数 379
19.6.3 使用ThreadPoolExecutor多线程爬取网页 379
19.7 复习题 381
19.8 上机实践 381
19.9 案例研究:文本统计并行处理 381
第20章 系统管理 382
20.1 系统管理相关模块 382
20.2 目录、文件和磁盘的基本操作 382
20.2.1 创建目录 382
20.2.2 临时目录和文件的创建 382
20.2.3 切换和获取当前工作目录 383
20.2.4 目录内容列表 383
20.2.5 文件通配符和glob.glob()函数 383
20.2.6 遍历目录和os.walk()函数 383
20.2.7 判断文件/目录是否存在 384
20.2.8 测试文件类型 384
20.2.9 文件的日期及大小 384
20.2.10 文件和目录的删除 385
20.2.11 文件和目录的复制、重命名和移动 385
20.2.12 磁盘的基本操作 385
20.3 执行操作系统命令和运行其他程序 386
20.3.1 os.system()函数 386
20.3.2 os.popen()函数 386
20.3.3 subprocess模块 386
20.4 获取终端的大小 387
20.5 文件的压缩和解压缩 388
20.5.1 shutil模块支持的压缩和解压缩格式 388
20.5.2 make_archive()函数和文件压缩 388
20.5.3 unpack_archive()函数和文件解压缩 388
20.6 configparser模块和配置文件 389
20.6.1 INI文件及INI文件格式 389
20.6.2 ConfigParser对象和INI文件操作 389
20.7 应用举例 390
20.7.1 病毒扫描 390
20.7.2 文件目录树 391
20.8 复习题 392
20.9 上机实践 393
20.10 案例研究:简易图形用户界面压缩软件 393
参考文献 394