输出中打印Unicode字符45
1.23对Unicode数据编码并用于XML和HTML46
1.24让某些字符串大小写不敏感49
1.25将HTML文档转化为文本显示到UNIX终端上52
第2章文件55
引言55
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在MacOSX平台上统计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章时间和财务计算105
引言105
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
第4章Python技巧139
引言139
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中使用printf174
4.21以指定的概率获取元素174
4.22在表达式中处理异常176
4.23确保名字已经在给定模块中被定义178
第5章搜索和排序180
引言180
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章面向对象编程217
引言217
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.17Null对象设计模式的实现263
6.18用__init__参数自动初始化实例变量266
6.19调用超类的__init__方法267
6.20精确和安全地使用协作的超类调用270
第7章持久化和数据库273
引言273
7.1使用marshal模块序列化数据275
7.2使用pickle和cPickle模块序列化数据277
7.3在Pickling的时候压缩280
7.4对类和实例使用cPickle模块281
7.5Pickling被绑定方法284
7.6Pickling代码对象286
7.7通过shelve修改对象288
7.8使用BerkeleyDB数据库291
7.9访问MySQL数据库294
7.10在MySQL数据库中储存BLOB295
7.11在PostgreSQL中储存BLOB296
7.12在SQLite中储存BLOB298
7.13生成一个字典将字段名映射为列号300
7.14利用dtuple实现对查询结果的灵活访问302
7.15打印数据库游标的内容304
7.16适用于各种DBAPI模块的单参数传递风格306
7.17通过ADO使用MicrosoftJet308
7.18从JythonServlet访问JDBC数据库310
7.19通过Jython和ODBC获得Excel数据313
第8章调试和测试315
引言315
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在Python2.4中使用doctest和unittest331
8.11在单元测试中检查区间334
第9章进程、线程和同步336
引言336
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获取UNIXShell命令的输出流和错误流364
9.13在UNIX中fork一个守护进程367
第10章系统管理370
引言370
10.1生成随机密码371
10.2生成易记的伪随机密码372
10.3以POP服务器的方式验证用户375
10.4统计Apache中每个IP的点击率376
10.5统计Apache的客户缓存的命中率378
10.6在脚本中调用编辑器379
10.7备份文件381
10.8选择性地复制邮箱文件383
10.9通过邮箱创建一个邮件地址的白名单384
10.10阻塞重复邮件386
10.11检查你的Windows声音系统388
10.12在Windows中注册和反注册DLL388
10.13检查并修改Windows自动运行任务390
10.14在Windows中创建共享391
10.15连接一个正在运行的InternetExplorer实例392
10.16读取MicrosoftOutlookContacts393
10.17在MacOSX中收集详细的系统信息396
第11章用户界面400
引言400
11.1在文本控制台中显示进度条402
11.2避免在编写回调函数时使用lambda404
11.3在tkSimpleDialog函数中使用默认值和区间405
11.4给Tkinter列表框增加拖曳排序能力406
11.5在Tkinter部件中输入一个重音字符408
11.6在Tkinter中嵌入内联的GIF410
11.7转换图片格式412
11.8在Tkinter中实现一个秒表415
11.9用线程实现GUI和异步I/O的结合417
11.10在Tkinter中使用IDLE的Tree部件421
11.11在TkinterListbox中支持单行多值423
11.12在Tkinter部件之间复制Geometry方法和选项427
11.13在Tkinter中实现一个带标签的记事本429
11.14使用wxPython实现带面板的记事本431
11.15在Jython中实现一个ImageJ插件433
11.16用Swing和Jython来通过URL查看图片434
11.17在MacOS中获得用户输入434
11.18程序化地创建PythonCocoaGUI437
11.19用IronPython实现淡入窗口439
第12章XML处理441
引言441
12.1检查XML的格式完好性443
12.2计算文档中标签的个数444
12.3获得XML文档中的文本445
12.4自动探测XML的编码447
12.5将一个XML文档转化成Python对象树449
12.6从XMLDOM节点的子树中删除仅有空白符的文本节点451
12.7解析MicrosoftExcel的XML452
12.8验证XML文档454
12.9过滤属于指定命名空间的元素和属性455
12.10用SAX合并连续的文本事件458
12.11使用MSHTML来解析XML或HTML461
第13章网络编程462
引言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修复Python2.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
第14章Web编程502
引言502
14.1测试CGI是否在工作503
14.2用CGI脚本处理URL506
14.3用CGI上传文件507
14.4检查web页面的存在509
14.5通过HTTP检查内容类型510
14.6续传HTTP下载文件512
14.7抓取Web页面时处理Cookie513
14.8通过带身份验证的代理进行HTTPS导航516
14.9用Jython实现Servlet517
14.10寻找InternetExplorer的cookie519
14.11生成OPML文件521
14.12聚合RSSFeed524
14.13通过模板将数据放入Web页面527
14.14在Nevow中呈现任意对象530
第15章分布式编程534
引言534
15.1实现一个XML-RPC方法调用536
15.2服务XML-RPC请求537
15.3在Medusa中使用XML-RPC539
15.4允许XML-RPC服务被远程终止541
15.5SimpleXMLRPCServer的一些细节542
15.6给一个XML-RPC服务提供一个wxPythonGUI544
15.7使用Twisted的PerspectiveBroker546
15.8实现一个CORBA服务和客户549
15.9使用telnetlib执行远程登录551
15.10使用SSH执行远程登录554
15.11通过HTTPS验证一个SSL客户端557
第16章关于程序的程序559
引言559
16.1验证字符串是否代表着一个合法的数字564
16.2导入一个动态生成的模块565
16.3导入一个名字在运行时被确定的模块567
16.4将参数和函数联系起来568
16.5组合函数571
16.6使用内建的Tokenizer给Python源码上色572
16.7合并和拆解Token575
16.8检查字符串是否有平衡的圆括号577
16.9在Python中模拟枚举580
16.10在创建列表推导时引用它自身583
16.11自动化py2exe将脚本编译成Windows可执行文件的过程585
16.12在UNIX中将主脚本和模块绑成一个可执行文件587
第17章扩展和嵌入590
引言590
17.1实现一个简单的扩展类型592
17.2用Pyrex实现一个简单的扩展类型597
17.3在Python中使用C++库598
17.4调用WindowsDLL的函数601
17.5在多线程环境中使用SWIG生成的模块603
17.6用PySequence_Fast将Python序列转为C数组604
17.7用迭代器逐个访问Python序列的元素608
17.8从Python可调用的C函数中返回None611
17.9用gdb调试动态载入的C扩展613
17.10调试内存问题614
第18章算法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
第19章迭代器和生成器660
引言660
19.1编写一个类似range的浮点数递增的函数663
19.2从任意可迭代对象创建列表665
19.3生成Fibonacci序列667
19.4在多重赋值中拆解部分项669
19.5自动拆解出需要的数目的项670
19.6以步长n将一个可迭代对象切成n片672
19.7通过重叠窗口循环序列674
19.8并行地循环多个可迭代对象678
19.9循环多个可迭代对象的矢量积680
19.10逐段读取文本文件683
19.11读取带有延续符的行685
19.12将一个数据块流处理成行流687
19.13用生成器从数据库中抓取大记录集688
19.14合并有序序列690
19.15生成排列、组合以及选择694
19.16生成整数的划分696
19.17复制迭代器697
19.18迭代器的前瞻701
19.19简化队列消费者线程703
19.20在另一个线程中运行迭代器705
19.21用itertools.groupby来计算汇总报告706
第20章描述符、装饰器和元类710
引言710
20.1在函数调用中获得常新的默认值712
20.2用嵌套函数来编写property属性715
20.3给属性值起别名717
20.4缓存属性值719
20.5用同一个方法访问多个属性722
20.6封装一个方法来给类增加功能723
20.7增强所有方法来给类增加功能726
20.8在运行时给一个类实例添加方法728
20.9检查接口的实现730
20.10在自定义元类中正确地使用__new__和__init__732
20.11允许对List的可变方法的链式调用734
20.12通过更紧凑的语法使用协作的超类调用736
20.13不使用__init__来初始化实例属性738
20.14实例属性的自动初始化740
20.15重新加载时自动更新类实例743
20.16在编译时绑定常量747
20.17解决元类冲突752