第一章 文本

1.1　每次处理一个字符 6
1.2　字符和字符值之间的转换 7
1.3　测试一个对象是否是类字符串 8
1.4　字符串对齐 10
1.5　去除字符串两端的空格 11
1.6　合并字符串 11
1.7　将字符串逐字符或逐词反转 14
1.8　检查字符串中是否包含某字符集合中的字符 15
1.9　简化字符串的translate方法的使用 18
1.10　过滤字符串中不属于指定集合的字符 20
1.11　检查一个字符串是文本还是二进制 23
1.12　控制大小写 25
1.13　访问子字符串 26
1.14　改变多行文本字符串的缩进 29
1.15　扩展和压缩制表符 31
1.16　替换字符串中的子串 33
1.17　替换字符串中的子串-Python 2.4 34
1.18　一次完成多个替换 36
1.19　检查字符串中的结束标记 39
1.20　使用Unicode来处理国际化文本 40
1.21　在Unicode和普通字符串之间转换 43
1.22　在标准输出中打印Unicode字符 45
1.23　对Unicode数据编码并用于XML和HTML 46
1.24　让某些字符串大小写不敏感 49
1.25　将HTML文档转化为文本显示到UNIX终端上 52
第十八章 算法 616

引言 616
18.1　消除序列中的重复 619
18.2　在保留序列顺序的前提下消除其中的重复 621
18.3　生成回置采样 625
18.4　生成无回置的抽样 626
18.5　缓存函数的返回值 627
18.6　实现一个FIFO容器 629
18.7　使用FIFO策略来缓存对象 631
18.8　实现一个Bag（Multiset）收集类型 634
18.9　在Python模拟三元操作符 637
18.10　计算素数 640
18.11　将整数格式化为二进制字符串 642
18.12　以任意数为基将整数格式化为字符串 644
18.13　通过法雷分数将数字转成有理数 646
18.14　带误差传递的数学计算 648
18.15　以最大精度求和 651
18.16　模拟浮点数 653
18.17　计算二维点集的凸包和直径 656
第十三章 网络编程

引言 462
13.1　通过Socket数据报传输消息 464
13.2　从Web抓取文档 466
13.3　过滤FTP站点列表 467
13.4　通过SNTP协议从服务器获取时间 468
13.5　发送HTML邮件 469
13.6　在MIME消息中绑入文件 471
13.7　拆解一个分段MIME消息 474
13.8　删除邮件消息中的附件 475
13.9　修复Python 2.4的email.FeedParser 解析的消息 477
13.10　交互式地检查POP3邮箱 479
13.11　探测不活动的计算机 482
13.12　用HTTP监视网络 487
13.13　网络端口的转发和重定向 489
13.14　通过代理建立SSL隧道 492
13.15　实现动态IP协议 495
13.16　登录到IRC并将消息记录到磁盘 498
13.17　访问LDAP服务 500
第十四章 Web编程 502

引言 502
14.1　测试CGI是否在工作 503
14.2　用CGI脚本处理URL 506
14.3　用CGI上传文件 507
14.4　检查web页面的存在 509
14.5　通过HTTP检查内容类型 510
14.6　续传HTTP下载文件 512
14.7　抓取Web页面时处理Cookie 513
14.8　通过带身份验证的代理进行HTTPS导航 516
14.9　用Jython实现Servlet 517
14.10　寻找Internet Explorer的cookie 519
14.11　生成OPML文件 521
14.12　聚合RSS Feed 524
14.13　通过模板将数据放入Web页面 527
14.14　在Nevow中呈现任意对象 530
第二章 文件

2.1　读取文件 59
2.2　写入文件 62
2.3　搜索和替换文件中的文本 64
2.4　从文件中读取指定的行 65
2.5　计算文件的行数 66
2.6　处理文件中的每个词 68
2.7　随机输入/输出 70
2.8　更新随机存取文件 71
2.9　从zip文件中读取数据 73
2.10　处理字符串中的zip文件 74
2.11　将文件树归档到一个压缩的tar文件 76
2.12　将二进制数据发送到Windows的标准输出 77
2.13　使用C++的类iostream语法 78
2.14　回退输入文件到起点 80
2.15　用类文件对象适配真实文件对象 83
2.16　遍历目录树 84
2.17　在目录树中改变文件扩展名 85
2.18　从指定的搜索路径寻找文件 86
2.19　根据指定的搜索路径和模式寻找文件 87
2.20　在Python的搜索路径中寻找文件 88
2.21　动态地改变Python搜索路径 89
2.22　计算目录间的相对路径 91
2.23　跨平台地读取无缓存的字符 93
2.24　在Mac OS X平台上统计PDF文档的页数 94
2.25　在Windows平台上修改文件属性 95
2.26　从OpenOffice.org文档中提取文本 96
2.27　从微软Word文档中抽取文本 97
2.28　使用跨平台的文件锁 98
2.29　带版本号的文件名 100
2.30　计算CRC-64循环冗余码校验 102
第三章 时间和财务计算

3.1　计算昨天和明天的日期 111
3.2　寻找上一个星期五 112
3.3　计算日期之间的时段 114
3.4　计算歌曲的总播放时间 115
3.5　计算日期之间的工作日 116
3.6　自动查询节日 118
3.7　日期的模糊查询 121
3.8　检查夏令时是否正在实行 123
3.9　时区转换 124
3.10　反复执行某个命令 125
3.11　定时执行命令 127
3.12　十进制数学计算 129
3.13　将十进制数用于货币处理 130
3.14　用Python实现的简单加法器 133
3.15　检查信用卡校验和 136
3.16　查看汇率 137
第四章 Python技巧

4.1　对象拷贝 140
4.2　通过列表推导构建列表 144
4.3　若列表中某元素存在则返回之 146
4.4　循环访问序列中的元素和索引 147
4.5　在无须共享引用的条件下创建列表的列表 148
4.6　展开一个嵌套的序列 149
4.7　在行列表中完成对列的删除和排序 152
4.8　二维阵列变换 154
4.9　从字典中取值 155
4.10　给字典增加一个条目 157
4.11　在无须过多援引的情况下创建字典 158
4.12　将列表元素交替地作为键和值来创建字典 159
4.13　获取字典的一个子集 161
4.14　反转字典 163
4.15　字典的一键多值 164
4.16　用字典分派方法和函数 166
4.17　字典的并集与交集 167
4.18　搜集命名的子项 169
4.19　用一条语句完成赋值和测试 171
4.20　在Python中使用printf 174
4.21　以指定的概率获取元素 174
4.22　在表达式中处理异常 176
4.23　确保名字已经在给定模块中被定义 178
第五章 搜索和排序

5.1　对字典排序 185
5.2　不区分大小写对字符串列表排序 185
5.3　根据对象的属性将对象列表排序 187
5.4　根据对应值将键或索引排序 189
5.5　根据内嵌的数字将字符串排序 192
5.6　以随机顺序处理列表的元素 193
5.7　在增加元素时保持序列的顺序 195
5.8　获取序列中最小的几个元素 197
5.9　在排序完毕的序列中寻找元素 199
5.10　选取序列中最小的第n个元素 200
5.11　三行代码的快速排序 203
5.12　检查序列的成员 206
5.13　寻找子序列 208
5.14　给字典类型增加排名功能 210
5.15　根据姓的首字母将人名排序和分组 214
第六章 面向对象编程

6.1　温标的转换 223
6.2　定义常量 225
6.3　限制属性的设置 227
6.4　链式字典查询 229
6.5　继承的替代方案-自动托管 231
6.6　在代理中托管特殊方法 234
6.7　有命名子项的元组 237
6.8　避免属性读写的冗余代码 239
6.9　快速复制对象 240
6.10　保留对被绑定方法的引用且支持垃圾回收 243
6.11　缓存环的实现 245
6.12　检查一个实例的状态变化 249
6.13　检查一个对象是否包含某种必要的属性 252
6.14　实现状态设计模式 255
6.15　实现单例模式 257
6.16　用Borg惯用法来避免"单例"模式 259
6.17　Null对象设计模式的实现 263
6.18　用_ _init_ _参数自动初始化实例变量 266
6.19　调用超类的_ _init_ _方法 267
6.20　精确和安全地使用协作的超类调用 270
第七章 持久化和数据库

7.1　使用marshal模块序列化数据 275
7.2　使用pickle和cPickle模块序列化数据 277
7.3　在Pickling的时候压缩 280
7.4　对类和实例使用cPickle模块 281
7.5　Pickling被绑定方法 284
7.6　Pickling代码对象 286
7.7　通过shelve修改对象 288
7.8　使用Berkeley DB数据库 291
7.9　访问MySQL数据库 294
7.10　在MySQL数据库中储存BLOB 295
7.11　在PostgreSQL中储存BLOB 296
7.12　在SQLite中储存BLOB 298
7.13　生成一个字典将字段名映射为列号 300
7.14　利用dtuple实现对查询结果的灵活访问 302
7.15　打印数据库游标的内容 304
7.16　适用于各种DB API模块的单参数传递风格 306
7.17　通过ADO使用Microsoft Jet 308
7.18　从Jython Servlet访问JDBC数据库 310
7.19　通过Jython和ODBC获得Excel数据 313
第八章 调试和测试

8.1　阻止某些条件和循环的执行 316
8.2　在Linux上测量内存使用 317
8.3　调试垃圾回收进程 318
8.4　捕获和记录异常 320
8.5　在调试模式中跟踪表达式和注释 322
8.6　从traceback中获得更多信息 324
8.7　当未捕获异常发生时自动启用调试器 327
8.8　简单的使用单元测试 328
8.9　自动运行单元测试 330
8.10　在Python 2.4中使用doctest和unittest 331
8.11　在单元测试中检查区间 334
第九章 进程、线程和同步

9.1　同步对象中的所有方法 339
9.2　终止线程 342
9.3　将Queue.Queue用作优先级队列 344
9.4　使用线程池 346
9.5　以多组参数并行执行函数 349
9.6　用简单的消息传递协调线程 351
9.7　储存线程信息 353
9.8　无线程的多任务协作 357
9.9　在Windows中探测另一个脚本实例的运行 359
9.10　使用MsgWaitForMultipleObjects处理Windows消息 360
9.11　用popen驱动外部进程 363
9.12　获取UNIX Shell命令的输出流和错误流 364
9.13　在UNIX中fork一个守护进程 367