书海网短评:
(1)本书由资深Python专家亲自执笔,Python语言的核心开发人员鼎力推荐。(2)对程序员而言,标准库与语言本身同样重要,它好比一个百宝箱,能为各种常见的任务提供完美的解决方案,所以本书是所有Python
(1)《Python 3标准库》由资深Python专家亲自执笔,Python语言的核心开发人员鼎力推荐。
(2)对程序员而言,标准库与语言本身同样重要,它好比一个百宝箱,能为各种常见的任务提供完美的解决方案,所以《Python 3标准库》是所有Python程序员都必备的工具书!《Python 3标准库》以案例驱动的方式讲解了标准库中数百个模块的使用方法(如何工作)和工作原理(为什么要这样工作),比标准库的官方文档更容易理解(一个简单的示例比一份手册文档更有帮助),为Python程序员熟练掌握和使用这些模块提供了绝*指导。
(3)《Python 3标准库》针对Python3,介绍了Python3.x中新增的库、重大的功能变化,以及新的布局和命名约定。此外,书中还提供了专家级移植指导,可帮助你将代码从Python2.x标准库模块移植到相应的Python3.x标准库模块。
《Python 3标准库》共19章,系统而全面地对Python3标准库中的数百个模块进行了生动的讲解。这些模块主要包括:文本处理工具模块,与数据结构和算法相关的模块,管理日期和时间值的模块,用于数学计算的模块,管理文件系统的模块,用于数据存储与交换的模块,用于数据压缩与归档的模块,用于加密的模块,与进程和线程相关的模块,与网络通信、Internet和Email相关的模块,应用构建模块,支持处理多种自然语言和文化设置的模块,开发工具模块,与运行时特性相关的模块等。书中提供了大量示例来充分展示每一个特性,这些示例经过精心设计,以便于学习和重用。
《Python 3标准库》适合作为Python程序员的必备参考书。
道格·赫尔曼(DougHellmann)目前任职于RedHat,主要负责开发OpenStack项目。他是OpenStack技术委员会的委员,对这个项目的很多方面做出了突出贡献。他从Python1.4版本就开始投入Python编程,曾在多种UNIX和非UNIX平台上参与项目开发,涉及领域包括地图、医疗新闻播报、金融和数据中心自动化。Doug也是PythonSoftwareFoundation的成员,并于2010~2012年担任其信息交流主管。在为《PythonMagazine》做了一年普通专栏作家后,他于2008~2009年担任该杂志的主编。2007~2011年间,Doug在他的博客上发表了颇受关注的“PythonModuleoftheWeek”系列,以及《Python 3标准库》的上一个版本(面向Python2),即《Python标准库》(Addison-Wesley,2011)。
Doug这些方法的过人之处在于,只需要每周15分钟,只需要有积极性,任何程序员都能掌握Python标准库。Doug带你踏上的Python标准库之旅会帮助你打开领略Python强大功能的大门。
——RaymondHettinger,Python核心开发人员
译者序
前言
第1章文本1
1.1string:文本常量和模板1
1.1.1函数1
1.1.2模板2
1.1.3高级模板3
1.1.4Formatter5
1.1.5常量5
1.2textwrap:格式化文本段落6
1.2.1示例数据6
1.2.2填充段落7
1.2.3去除现有的缩进7
1.2.4结合dedent和f?ill8
1.2.5缩进块8
1.2.6悬挂缩进10
1.2.7截断长文本10
1.3re:正则表达式11
1.3.1查找文本中的模式11
1.3.2编译表达式12
1.3.3多重匹配13
1.3.4模式语法14
1.3.5限制搜索22
1.3.6用组解析匹配24
1.3.7搜索选项29
1.3.8前向或后向35
1.3.9自引用表达式38
1.3.10用模式修改字符串42
1.3.11利用模式拆分44
1.4diff?lib:比较序列46
1.4.1比较文本体47
1.4.2无用数据49
1.4.3比较任意类型50
第2章数据结构52
2.1enum:枚举类型53
2.1.1创建枚举53
2.1.2迭代53
2.1.3比较Enum54
2.1.4唯一枚举值55
2.1.5通过编程创建枚举56
2.1.6非整数成员值58
2.2collections:容器数据类型60
2.2.1ChainMap:搜索多个字典60
2.2.2Counter:统计可散列的对象63
2.2.3defaultdict:缺少的键返回一个默认值66
2.2.4deque:双端队列67
2.2.5namedtuple:带命名字段的元组子类70
2.2.6OrderedDict:记住向字典中增加键的顺序74
2.2.7collections.abc:容器的抽象基类76
2.3数组:固定类型数据序列78
2.3.1初始化78
2.3.2处理数组79
2.3.3数组和文件79
2.3.4候选字节顺序80
2.4heapq:堆排序算法81
2.4.1示例数据81
2.4.2创建堆82
2.4.3访问堆的内容83
2.4.4堆的数据极值85
2.4.5高效合并有序序列85
2.5bisect:维护有序列表86
2.5.1有序插入86
2.5.2处理重复87
2.6queue:线程安全的FIFO实现88
2.6.1基本FIFO队列88
2.6.2LIFO队列89
2.6.3优先队列89
2.6.4构建一个多线程播客客户程序90
2.7struct:二进制数据结构93
2.7.1函数与Struct类93
2.7.2打包和解包93
2.7.3字节序94
2.7.4缓冲区95
2.8weakref:对象的非永久引用96
2.8.1引用96
2.8.2引用回调97
2.8.3最终化对象98
2.8.4代理100
2.8.5缓存对象101
2.9copy:复制对象103
2.9.1浅副本103
2.9.2深副本104
2.9.3定制复制行为105
2.9.4深副本中的递归106
2.10pprint:美观打印数据结构107
2.10.1打印108
2.10.2格式化108
2.10.3任意类109
2.10.4递归110
2.10.5限制嵌套输出110
2.10.6控制输出宽度111
第3章算法113
3.1functools:管理函数的工具113
3.1.1修饰符113
3.1.2比较119
3.1.3缓存122
3.1.4缩减数据集125
3.1.5泛型函数127
3.2itertools:迭代器函数129
3.2.1合并和分解迭代器129
3.2.2转换输入132
3.2.3生成新值133
3.2.4过滤135
3.2.5数据分组138
3.2.6合并输入139
3.3operator:内置操作符的函数接口144
3.3.1逻辑操作144
3.3.2比较操作符145
3.3.3算术操作符145
3.3.4序列操作符146
3.3.5原地操作符148
3.3.6属性和元素“获取方法”148
3.3.7结合操作符和定制类150
3.4contextlib:上下文管理器工具151
3.4.1上下文管理器API151
3.4.2上下文管理器作为函数修饰符153
3.4.3从生成器到上下文管理器154
3.4.4关闭打开的句柄156
3.4.5忽略异常157
3.4.6重定向输出流158
3.4.7动态上下文管理器栈159
第4章日期和时间166
4.1time:时钟时间166
4.1.1比较时钟166
4.1.2墙上时钟时间167
4.1.3单调时钟168
4.1.4处理器时钟时间169
4.1.5性能计数器170
4.1.6时间组成170
4.1.7处理时区171
4.1.8解析和格式化时间172
4.2datetime:日期和时间值管理174
4.2.1时间174
4.2.2日期175
4.2.3timedelta177
4.2.4日期算术运算178
4.2.5比较值179
4.2.6结合日期和时间179
4.2.7格式化和解析180
4.2.8时区182
4.3calendar:处理日期183
4.3.1格式化示例183
4.3.2本地化环境185
4.3.3计算日期186
第5章数学运算188
5.1decimal:定点数和浮点数的数学运算188
5.1.1Decimal188
5.1.2格式化189
5.1.3算术运算190
5.1.4特殊值191
5.1.5上下文192
5.2fractions:有理数196
5.2.1创建Fraction实例197
5.2.2算术运算198
5.2.3近似值199
5.3random:伪随机数生成器199
5.3.1生成随机数200
5.3.2指定种子200
5.3.3保存状态201
5.3.4随机整数202
5.3.5选择随机元素203
5.3.6排列203
5.3.7采样205
5.3.8多个并发生成器205
5.3.9SystemRandom206
5.3.10非均匀分布207
5.4math:数学函数208
5.4.1特殊常量208
5.4.2测试异常值208
5.4.3比较210
5.4.4将浮点值转换为整数212
5.4.5浮点值的其他表示213
5.4.6正号和负号214
5.4.7常用计算215
5.4.8指数和对数218
5.4.9角222
5.4.10三角函数224
5.4.11双曲函数226
5.4.12特殊函数227
5.5statistics:统计计算228
5.5.1平均值228
5.5.2方差230
第6章文件系统232
6.1os.path:平台独立的文件名管理233
6.1.1解析路径233
6.1.2建立路径236
6.1.3规范化路径237
6.1.4文件时间238
6.1.5测试文件238
6.2pathlib:文件系统路径作为对象240
6.2.1路径表示240
6.2.2建立路径240
6.2.3解析路径242
6.2.4创建具体路径243
6.2.5目录内容244
6.2.6读写文件246
6.2.7管理目录和符号链接246
6.2.8文件类型247
6.2.9文件属性248
6.2.10权限250
6.2.11删除250
6.3glob:文件名模式匹配252
6.3.1示例数据252
6.3.2通配符252
6.3.3单字符通配符253
6.3.4字符区间253
6.3.5转义元字符254
6.4fnmatch:UNIX式glob模式匹配254
6.4.1简单匹配254
6.4.2过滤255
6.4.3转换模式256
6.5linecache:高效读取文本文件257
6.5.1测试数据257
6.5.2读取特定行257
6.5.3处理空行258
6.5.4错误处理258
6.5.5读取Python源文件259
6.6tempf?ile:临时文件系统对象260
6.6.1临时文件260
6.6.2命名文件262
6.6.3假脱机文件262
6.6.4临时目录263
6.6.5预测名264
6.6.6临时文件位置264
6.7shutil:高层文件操作265
6.7.1复制文件265
6.7.2复制文件元数据268
6.7.3处理目录树269
6.7.4查找文件271
6.7.5归档272
6.7.6文件系统空间275
6.8f?ilecmp:比较文件276
6.8.1示例数据276
6.8.2比较文件278
6.8.3比较目录279
6.8.4在程序中使用差异280
6.9mmap:内存映射文件283
6.9.1读文件284
6.9.2写文件285
6.9.3正则表达式286
6.10codecs:字符串编码和解码287
6.10.1Unicode入门287
6.10.2处理文件289
6.10.3字节序291
6.10.4错误处理293
6.10.5编码转换295
6.10.6非Unicode编码296
6.10.7增量编码297
6.10.8Unicode数据和网络通信299
6.10.9定义定制编码301
6.11io:文本、十进制和原始流I/O工具307
6.11.1内存中的流307
6.11.2为文本数据包装字节流308
自1991年首次发布以来,Python的用户群体便开始不断增长,Python也逐步成为开源开发中最受欢迎的编程语言之一。实际上,Python语言的最大优势并不是语言本身的特性,而是它拥有脚本语言中最丰富的第三方模块,这是其他任何语言都无法比拟的巨大优势。很多人学习和使用Python正是因为Python拥有某个非常适合其工作领域的简单易用的模块。
标准库中包含数百个模块,为常见任务提供了丰富的工具,可以用来作为应用开发的起点。学习这些模块时,简短的例子要比详尽的手册文档更有帮助。这也正是写作《Python 3标准库》的出发点。
作为PythonSoftwareFoundation的成员,作者道格·赫尔曼(DougHellmann)从1.4版本开始就一直在做Python编程工作,曾在大量UNIX和非UNIX平台上参与项目开发,涉及众多领域,积累了丰富的经验。他全面研究了标准库的模块,并在他的博客“PythonModuleoftheWeek”中利用实际例子介绍各个模块应该如何使用。为满足人们迫切的需求,他将这些博客文章进一步整理完善,并在2011年出版了针对Python2的《Python标准库》。
当前,Python社区正在从Python2向Python3过渡。Python2与Python3之间存在很多不兼容性,特别是很多曾经的标准库模块在Python3中已经改名或者已经重新组织。鉴于此,时隔7年之后,终于有了这本《Python3标准库》,它主要强调Python3,同样沿袭《Python标准库》的风格,通过轻松的方式,帮助你从具体的例子、具体的实践中了解技术细节,在知道“怎样做”的同时还能理解“为什么这样做”。所有例子都已经在Python3.5上通过测试。
《Python 3标准库》由苏金国、李璜主译,杨健康、乔会东、仝磊、王少轩、程芳、宋旭民、黄小钰等分别对《Python 3标准库》各章进行了审阅,另外姚曜、程龙、吴忠望、张练达、陈峰、江健、姚勇、卢鋆、张莹参与了《Python 3标准库》的修改整理工作,林琪、刘亮、刘跃邦、高强和王志淋统一《Python 3标准库》术语,并完善了关键部分的翻译。全体人员共同完成了《Python 3标准库》的翻译工作。由于译者水平有限,译文肯定有不当之处,敬请批评指正。
标准库会随每一版Python的发布而发布,其中包含数百个模块,为操作系统、解释器和互联网之间的交互提供了丰富的工具—所有这些模块都得到充分测试,可以用来作为应用开发的起点。《Python 3标准库》会提供一些精选的例子,向你展示如何使用这些模块中最常用的一些特性,正是这些特性使Python有了“内含动力”(batteriesincluded)的座右铭。这些例子均取自颇受关注的“PythonModuleoftheWeek(PyMOTW)”博客系列。
《Python 3标准库》读者对象
《Python 3标准库》的读者应该是中等程度的Python程序员,所以尽管书中对所有源代码都做了讨论,却也只有少数情况会逐行给出解释。每一节都强调了模块的特性,并通过源代码以及完全独立的示例程序的输出来具体说明。《Python 3标准库》还尽可能简洁地介绍了各个特性,使读者能够把重点放在所展示的模块或函数上,而不会因支持代码而分心。
熟悉其他语言的有经验的程序员可以利用《Python 3标准库》来了解Python,但《Python 3标准库》并不是关于Python语言的入门读物。研究这些例子时,如果之前有编写Python程序的经验,那么一定会很有帮助。
很多章节(比如介绍套接字网络编程或hmac加密的章节)还需要一些领域特定的知识。书中会提供解释这些例子所需的基本信息,不过由于标准库中模块涵盖的主题如此宽泛,所以不可能在一《Python 3标准库》中全面地介绍每一个主题。在每个模块的讨论之后,还提供了一个推荐资源列表,大家可以进一步阅读这些资源,从中了解更多信息。推荐资源包括在线资源、RFC标准文档以及相关图书。
Python3与Python2
Python社区目前正在从Python2向Python3过渡。从主版本号可以看出,Python2和Python3有很多不兼容之处,而且这种不兼容不只是存在于语言中。Python3中很多标准库模块都已经改名或者重新组织。
Python开发社区认识到这种不兼容可能需要一个很长的过渡期,最终Python库和工具的生态系统会更新为使用Python3。尽管很多项目仍依赖于Python2,但Python2目前只接受安全更新,并且还计划在2020年前完全废弃。所有新特性都只能在Python3版本中使用。
编写可以同时用于这两个版本的程序可能很有难度,但并不是全无可能。这样做通常要求检查程序在哪个Python版本下运行,并且在导入时使用不同的模块名,或者在调用类或函数时使用不同的参数。在标准库之外,已经有大量工具可以简化这个过程。为了保证《Python 3标准库》中的例子尽可能简洁,同时仍然只依赖于标准库,我们将主要强调Python3。所有例子已经在Python3.5上通过测试(写作《Python 3标准库》时3.x系列的当前版本),如果不加修改,可能无法用于Python2。要查看专门为使用Python2而设计的例子,请参考《Python 3标准库》的Python2版本《Python标准库》。
为了保证为每个例子提供清晰而简洁的描述,每一章不会过分强调Python2和Python3的差别。关于移植说明的附录会总结这两个版本之间一些最大的区别,这部分内容会合理组织,以便能有效地帮助从Python2到Python3的移植。
《Python 3标准库》组织结构
http://docs.python.org上提供了详尽的参考指南,而《Python 3标准库》可以作为补充,提供功能完备的示例程序来展示这里介绍的特性。模块被分组为不同章节,以便轻松查找单个模块作为参考,并且可以按主题浏览进行更深层次的探讨。尽管可能不会一页页地从头到尾阅读《Python 3标准库》,但如果你确实想要这么做,那么为了预备这种情况,《Python 3标准库》也做了合理的组织,尽可能不要求你“提前参考”还没有介绍过的模块,不过要想完全避免这种情况是不可能的。
下载示例代码
原来的博客文章和示例代码可以在https://pymotw.com/3/找到。《Python 3标准库》勘误可以从作者的网站(https://doughellmann.com/blog/the-python-3-standard-library-by-example/)下载。
致谢
如果没有大家的贡献和支持,这《Python 3标准库》绝无可能问世。
1997年DickWall让我第一次接触到Python,那时我们正在ERDAS一起合作开发GIS软件。记得在发现这样一个如此简便易用的新的工具语言时,我便立刻喜欢上了它,而且还对公司不让我们用它来完成“实际工作”颇有不满。在接下来的所有工作中我大量使用了Python,而这正是因为Dick,我要感谢从那以后软件开发给我带来的快乐时光。
Python核心开发小组创建了一个由语言、工具和库共同构建的健壮的生态系统,这些库在日益普及,也在不断发现新的应用领域。如果没有他们付出的宝贵时间,没有他们提供的丰富资源,我们可能还得花时间一次又一次地从头开始。
《Python 3标准库》中的材料最初是一系列博客帖子。如果没有博客读者们异常积极的响应,这些文章不会更新成使用Python3,这本新书也不可能出现。每个帖子都得到了Python社区成员的审阅和评论,有纠正,有建议,也有问题,这些评论促使我做出修改,这才有了你手上这《Python 3标准库》。感谢大家日复一日地花时间来阅读我的博客,谢谢大家投入的时间和精力。
《Python 3标准库》的技术审校人员—DianaClarke、IanCordasco、MarkMcClain、PaulMcLanahan和RyanPetrello—花了大量时间查找示例代码和相关解释中存在的问题。感谢他们的辛勤工作,最终的作品远比我靠一人之力得到的结果好得多。
JimBaker描述readline模块时提供了很有帮助的观点,特别是为那些GNU库很老或者默认未安装GNU库的平台提出了gnureadline包。
Patr









