Python标准库 [The Python Standard Library by Example]这本书,是由机械工业出版社在2012-06-01月出版的,本书著作者是 [美] Doug Hellmann 著,刘炽 等 译,此次本版是第1次印刷发行, 国际标准书号(ISBN):9787111378105,品牌为机工出版, 这本书的包装是16开平装,所用纸张为胶版纸,全书共有1037页字数万字, 是一本非常不错的Python编程书籍。
此书内容摘要
Python标准库包含数百个模块,可以与操作系统、解释器和Internet交互-所有这些模块都经过了充分测试,可以直接投入你的应用开发。本书精心设计了大量示例以便于学习和重用,通过这些简洁、独立的源代码/输出示例,全面介绍了Python 2.7库的几乎每一个重要方面。
通过大量精心挑选的示例掌握强大的Python标准库!
Python标准库包含数百个模块,可以用来与操作系统、解释器和Internet交互——所有这些模块都已经过充分测试,可以直接在日常开发中使用。本书精心设计了大量示例,以方便读者学习和使用标准库。
《Python标准库》作者拥有12年以上Python开发经验,是Python软件基金会的信息交流主管,他的“Python Module of the Week”系列博客文章享誉整个Python社区,本书便是以这一系列博客文章为基础,以示例的方式展示了标准库中的每个模块是如何工作的以及为什么要这样工作。
在本书中,你会看到用来处理文本、数据类型、算法、数学计算、文件系统、网络通信、Internet、XML、Email、加密、并发性、运行时和语言服务等各个方面的实用代码和解决方案。在内容安排上,每一节都会全面介绍一个模块,并提供一些很有价值的补充资源链接,这使得本书成为一本理想的Python标准库参考手册。
本书涵盖以下内容:
用string、textwrap、re和difflib处理文本;
实现数据结构:collections、array、queue、struct、copy,等等;
读、写和管理文件及目录;
正则表达式模式匹配;
交换数据和提供持久存储;
归档和数据压缩;
管理进程和线程;
使用应用“构建模块”:解析命令行选项、提示输入密码、调度事件和日志记录;
测试、调试和编译;
控制运行时配置;
使用模块和包工具。
如果你刚接触Python,本书将带你迅速进入一个全新的世界。如果你以前用过Python,你会发现一些新的强大的解决方案,对于你之前尝试过的模块,你会发现更好的用法。
关于此书作者
Doug Hellmann,目前是Racemi公司的一位高级开发人员,也是Python Software Foundation的信息交流主管。从1.4版开始他就一直在做Python编程,曾在大量UNIX和非UNIX平台上参与项目开发,涉及领域包括地图、医疗新闻播报、金融和数据中心自动化。为《Python Magazine》做了一年普通专栏作家后,他在2008—2009年成为这家杂志的主编。自2007年以来,Doug在他的博客上发表了颇受关注的“Python Module of the Week”系列。他居住在乔治亚州的Athens。
编辑们的推荐
《Python标准库》由资深Python专家亲自执笔,Python语言的核心开发人员作序推荐毋庸置疑。
Python标准库 [The Python Standard Library by Example]图书的目录
译者序
序
前言
第1章文本
1.1string-文本常量和模板
1.1.1函数
1.1.2模板
1.1.3高级模板
1.2textwrap-格式化文本段落
1.2.1示例数据
1.2.2填充段落
1.2.3去除现有缩进
1.2.4结合dedent和fill
1.2.5悬挂缩进
1.3re-正则表达式
1.3.1查找文本中的模式
1.3.2编译表达式
1.3.3多重匹配
1.3.4模式语法
1.3.5限制搜索
1.3.6用组解析匹配
1.3.7搜索选项
1.3.8前向或后向
1.3.9自引用表达式
1.3.10用模式修改字符串
1.3.11利用模式拆分
1.4difflib-比较序列
1.4.1比较文本体
1.4.2无用数据
1.4.3比较任意类型
第2章数据结构
2.1collections-容器数据类型
2.1.1Counter
2.1.2defaultdict
2.1.3deque
2.1.4namedtuple
2.1.5OrderedDict
2.2array-固定类型数据序列
2.2.1初始化
2.2.2处理数组
2.2.3数组与文件
2.2.4候选字节顺序
2.3heapq-堆排序算法
2.3.1示例数据
2.3.2创建堆
2.3.3访问堆的内容
2.3.4堆的数据极值
2.4bisect-维护有序列表
2.4.1有序插入
2.4.2处理重复
2.5Queue-线程安全的FIFO实现
2.5.1基本FIFO队列
2.5.2LIFO队列
2.5.3优先队列
2.5.4构建一个多线程播客客户程序
2.6struct-二进制数据结构
2.6.1函数与Struct类
2.6.2打包和解包
2.6.3字节序
2.6.4缓冲区
2.7weakref-对象的非永久引用
2.7.1引用
2.7.2引用回调
2.7.3代理
2.7.4循环引用
2.7.5缓存对象
2.8copy-复制对象
2.8.1浅副本
2.8.2深副本
2.8.3定制复制行为
2.8.4深副本中的递归
2.9pprint-美观打印数据结构
2.9.1打印
2.9.2格式化
2.9.3任意类
2.9.4递归
2.9.5限制嵌套输出
2.9.6控制输出宽度
第3章算法
3.1functools-管理函数的工具
3.1.1修饰符
3.1.2比较
3.2itertools-迭代器函数
3.2.1合并和分解迭代器
3.2.2转换输入
3.2.3生成新值
3.2.4过滤
3.2.5数据分组
3.3operator-内置操作符的函数接口
3.3.1逻辑操作
3.3.2比较操作符
3.3.3算术操作符
3.3.4序列操作符
3.3.5原地操作符
3.3.6属性和元素“获取方法”
3.3.7结合操作符和定制类
3.3.8类型检查
3.4contextlib-上下文管理器工具
3.4.1上下文管理器API
3.4.2从生成器到上下文管理器
3.4.3嵌套上下文
3.4.4关闭打开的句柄
第4章日期和时间
4.1time-时钟时间
4.1.1壁挂钟时间
4.1.2处理器时钟时间
4.1.3时间组成
4.1.4处理时区
4.1.5解析和格式化时间
4.2datetime-日期和时间值管理
4.2.1时间
4.2.2日期
4.2.3timedelta
4.2.4日期算术运算
4.2.5比较值
4.2.6结合日期和时间
4.2.7格式化和解析
4.2.8时区
4.3calendar-处理日期
4.3.1格式化示例
4.3.2计算日期
第5章数学计算
5.1decimal-定点数和浮点数的数学运算
5.1.1Decimal
5.1.2算术运算
5.1.3特殊值
5.1.4上下文
5.2fractions-有理数
5.2.1创建 Fraction实例
5.2.2算术运算
5.2.3近似值
5.3random-伪随机数生成器
5.3.1生成随机数
5.3.2指定种子
5.3.3保存状态
5.3.4随机整数
5.3.5选择随机元素
5.3.6排列
5.3.7采样
5.3.8多个并发生成器
5.3.9SystemRandom
5.3.10非均匀分布
5.4math-数学函数
5.4.1特殊常量
5.4.2测试异常值
5.4.3转换为整数
5.4.4其他表示
5.4.5正号和负号
5.4.6常用计算
5.4.7指数和对数
5.4.8角
5.4.9三角函数
5.4.10双曲函数
5.4.11特殊函数
第6章文件系统
6.1os.path-平台独立的文件名管理
6.1.1解析路径
6.1.2建立路径
6.1.3规范化路径
6.1.4文件时间
6.1.5测试文件
6.1.6遍历一个目录树
6.2glob-文件名模式匹配
6.2.1示例数据
6.2.2通配符
6.2.3单字符通配符
6.2.4字符区间
6.3linecache-高效读取文本文件
6.3.1测试数据
6.3.2读取特定行
6.3.3处理空行
6.3.4错误处理
6.3.5读取Python源文件
6.4tempfile-临时文件系统对象
6.4.1临时文件
6.4.2命名文件
6.4.3临时目录
6.4.4预测名
6.4.5临时文件位置
6.5shutil-高级文件操作
6.5.1复制文件
6.5.2复制文件元数据
6.5.3处理目录树
6.6mmap-内存映射文件
6.6.1读文件
6.6.2写文件
6.6.3正则表达式
6.7codecs-字符串编码和解码
6.7.1Unicode入门
6.7.2处理文件
6.7.3字节序
6.7.4错误处理
6.7.5标准输入和输出流
6.7.6编码转换
6.7.7非Unicode编码
6.7.8增量编码
6.7.9Unicode数据和网络通信
6.7.10定义定制编码
6.8StringIO-提供类文件API的文本缓冲区
6.9fnmatch-UNIX式glob模式匹配
6.9.1简单匹配
6.9.2过滤
6.9.3转换模式
6.10dircache-缓存目录列表
6.10.1列出目录内容
6.10.2标注列表
6.11filecmp-比较文件
6.11.1示例数据
6.11.2比较文件
6.11.3比较目录
6.11.4程序中使用差异
第7章数据持久存储与交换
7.1pickle-对象串行化
7.1.1导入
7.1.2编码和解码字符串数据
7.1.3处理流
7.1.4重构对象的问题
7.1.5不可pickle的对象
7.1.6循环引用
7.2shelve-对象持久存储
7.2.1 创建一个新shelf
7.2.2写回
7.2.3特定shelf类型
7.3anydbm-DBM数据库
7.3.1数据库类型
7.3.2创建一个新数据库
7.3.3打开一个现有数据库
7.3.4错误情况
7.4whichdb-识别DBM数据库格式
7.5sqlite3-嵌入式关系数据库
7.5.1创建数据库
7.5.2获取数据
7.5.3查询元数据
7.5.4行对象
7.5.5查询中使用变量
7.5.6批量加载
7.5.7定义新列类型
7.5.8确定列类型
7.5.9事务
7.5.10隔离级别
7.5.11内存中数据库
7.5.12导出数据库内容
7.5.13SQL中使用Python函数
7.5.14定制聚集
7.5.15定制排序
7.5.16线程和连接共享
7.5.17限制对数据的访问
7.6xml.etree.ElementTree-XML操纵API
7.6.1解析XML文档
7.6.2遍历解析树
7.6.3查找文档中的节点
7.6.4解析节点属性
7.6.5解析时监视事件
7.6.6创建一个定制树构造器
7.6.7解析串
7.6.8用元素节点构造文档
7.6.9美观打印XML
7.6.10设置元素属性
7.6.11由节点列表构造树
7.6.12将XML串行化至一个流
7.7csv-逗号分隔值文件
7.7.1读文件
7.7.2写文件
7.7.3方言
7.7.4使用字段名
第8章数据压缩与归档
8.1zlib-GNU zlib压缩
8.1.1处理内存中数据
8.1.2增量压缩与解压缩
8.1.3混合内容流
8.1.4校验和
8.1.5压缩网络数据
8.2gzip-读写GNU Zip文件
8.2.1写压缩文件
8.2.2读压缩数据
8.2.3处理流
8.3bz2-bzip2压缩
8.3.1内存中一次性操作
8.3.2增量压缩和解压缩
8.3.3混合内容流
8.3.4写压缩文件
8.3.5读压缩文件
8.3.6压缩网络数据
8.4tarfile-Tar归档访问
8.4.1测试Tar文件
8.4.2从归档文件读取元数据
8.4.3从归档抽取文件
8.4.4创建新归档
8.4.5使用候选归档成员名
8.4.6从非文件源写数据
8.4.7追加到归档
8.4.8处理压缩归档
8.5zipfile-ZIP归档访问
8.5.1测试ZIP文件
8.5.2从归档读取元数据
8.5.3从归档抽取归档文件
8.5.4创建新归档
8.5.5使用候选归档成员名
8.5.6从非文件源写数据
8.5.7利用ZipInfo实例写
8.5.8追加到文件
8.5.9Python ZIP归档
8.5.10限制
第9章加密
9.1hashlib-密码散列
9.1.1示例数据
9.1.2MD5示例
9.1.3SHA1示例
9.1.4按名创建散列
9.1.5增量更新
9.2hmac-密码消息签名与验证
9.2.1消息签名
9.2.2SHA与MD
9.2.3二进制摘要
9.2.4消息签名的应用
第10章进程与线程
10.1subprocess-创建附加进程
10.1.1运行外部命令
10.1.2直接处理管道
10.1.3连接管道段
10.1.4与其他命令交互
10.1.5进程间传递信号
10.2signal-异步系统事件
10.2.1接收信号
10.2.2获取注册的处理程序
10.2.3发送信号
10.2.4闹铃
10.2.5忽略信号
10.2.6信号和线程
10.3threading-管理并发操作
10.3.1Thread对象
10.3.2确定当前线程
10.3.3守护与非守护线程
10.3.4列举所有线程
10.3.5派生线程
10.3.6定时器线程
10.3.7线程间传送信号
10.3.8控制资源访问
10.3.9同步线程
10.3.10限制资源的并发访问
10.3.11线程特定数据
10.4multiprocessing-像线程一样管理进程
10.4.1multiprocessing基础
10.4.2可导入的目标函数
10.4.3确定当前进程
10.4.4守护进程
10.4.5等待进程
10.4.6终止进程
10.4.7进程退出状态
10.4.8日志
10.4.9派生进程
10.4.10向进程传递消息
10.4.11进程间信号传输
10.4.12控制资源访问
10.4.13同步操作
10.4.14控制资源的并发访问
10.4.15管理共享状态
10.4.16共享命名空间
10.4.17进程池
10.4.18实现MapReduce
第11章网络通信
11.1socket-网络通信
11.1.1寻址、协议簇和套接字类型
11.1.2TCP/IP客户和服务器
11.1.3用户数据报客户和服务器
11.1.4UNIX域套接字
11.1.5组播
11.1.6发送二进制数据
11.1.7非阻塞通信和超时
11.2select-高效等待I/O
11.2.1使用select()
11.2.2有超时的非阻塞I/O
11.2.3使用 poll()
11.2.4平台特定选项
11.3SocketServer-创建网络服务器
11.3.1服务器类型
11.3.2服务器对象
11.3.3实现服务器
11.3.4请求处理器
11.3.5回应示例
11.3.6线程和进程
11.4asyncore-异步I/O
11.4.1服务器
11.4.2客户
11.4.3事件循环
11.4.4处理其他事件循环
11.4.5处理文件
11.5asynchat-异步协议处理器
11.5.1消息终止符
11.5.2服务器和处理器
11.5.3客户
11.5.4集成
第12章Internet
12.1urlparse-分解URL
12.1.1解析
12.1.2反解析
12.1.3连接
12.2BaseHTTPServer-实现Web服务器的基类
12.2.1HTTP GET
12.2.2HTTP POST
12.2.3线程与进程
12.2.4处理错误
12.2.5设置首部
12.3urllib-网络资源访问
12.3.1利用缓存实现简单获取
12.3.2参数编码
12.3.3路径与URL
12.4urllib2-网络资源访问
12.4.1HTTP GET
12.4.2参数编码
12.4.3HTTP POST
12.4.4增加发出首部
12.4.5从请求提交表单数据
12.4.6上传文件
12.4.7创建定制协议处理器
12.5Base64-用ASCII编码二进制数据
12.5.1Base64编码
12.5.2Base64解码
12.5.3URL安全的变种
12.5.4其他编码
12.6robotparser-网络蜘蛛访问控制
12.6.1robots.txt
12.6.2测试访问权限
12.6.3长久蜘蛛
12.7Cookie-HTTP Cookie
12.7.1创建和设置Cookie
12.7.2Morsel
12.7.3编码值
12.7.4接收和解析Cookie首部
12.7.5候选输出格式
12.7.6废弃的类
12.8uuid-全局惟一标识符
12.8.1UUID 1-IEEE 802 MAC地址
12.8.2UUID 3和5-基于名字的值
12.8.3UUID 4-随机值
12.8.4处理UUID对象
12.9json-JavaScript对象记法
12.9.1编码和解码简单数据类型
12.9.2优质输出和紧凑输出
12.9.3编码字典
12.9.4处理定制类型
12.9.5编码器和解码器类
12.9.6处理流和文件
12.9.7混合数据流
12.10xmlrpclib-XML-RPC的客户端库
12.10.1连接服务器
12.10.2数据类型
12.10.3传递对象
12.10.4二进制数据
12.10.5异常处理
12.10.6将调用结合在一个消息中
12.11SimpleXMLRPCServer-一个XML-RPC服务器
12.11.1一个简单的服务器
12.11.2备用API名
12.11.3加点的API名
12.11.4任意API名
12.11.5公布对象的方法
12.11.6分派调用
12.11.7自省API
第13章Email
13.1smtplib-简单邮件传输协议客户
13.1.1发送Email消息
13.1.2认证和加密
13.1.3验证Email地址
13.2smtpd-示例邮件服务器
13.2.1邮件服务器基类
13.2.2调试服务器
13.2.3代理服务器
13.3imaplib-IMAP4客户库
13.3.1变种
13.3.2连接到服务器
13.3.3示例配置
13.3.4列出邮箱
13.3.5邮箱状态
13.3.6选择邮箱
13.3.7搜索消息
13.3.8搜索规则
13.3.9获取消息
13.3.10完整消息
13.3.11上传消息
13.3.12移动和复制消息
13.3.13删除消息
13.4mailbox-管理邮件归档
13.4.1mbox
13.4.2Maildir
13.4.3其他格式
第14章应用构建模块
14.1getopt-命令行选项解析
14.1.1函数参数
14.1.2短格式选项
14.1.3长格式选项
14.1.4一个完整的例子
14.1.5缩写长格式选项
14.1.6GNU选项解析
14.1.7结束参数处理
14.2optparse-命令行选项解析器
14.2.1创建OptionParser
14.2.2短格式和长格式选项
14.2.3用getopt比较
14.2.4选项值
14.2.5选项动作
14.2.6帮助消息
14.3argparse-命令行选项和参数解析
14.3.1与optparse比较
14.3.2建立解析器
14.3.3定义参数
14.3.4解析命令行
14.3.5简单示例
14.3.6自动生成的选项
14.3.7解析器组织
14.3.8高级参数处理
14.4readline-GNU Readline库
14.4.1配置
14.4.2完成文本
14.4.3访问完成缓冲区
14.4.4输入历史
14.4.5hook
14.5getpass-安全密码提示
14.5.1示例
14.5.2无终端使用getpass
14.6cmd-面向行的命令处理器
14.6.1处理命令
14.6.2命令参数
14.6.3现场帮助
14.6.4自动完成
14.6.5覆盖基类方法
14.6.6通过属性配置Cmd
14.6.7运行shell命令
14.6.8候选输入
14.6.9sys.argv的命令
14.7shlex-解析shell语法
14.7.1加引号的字符串
14.7.2嵌入注释
14.7.3分解
14.7.4包含其他Token源
14.7.5控制解析器
14.7.6错误处理
14.7.7POSIX与非POSIX解析
14.8ConfigParser-处理配置文件
14.8.1配置文件格式
14.8.2读取配置文件
14.8.3访问配置设置
14.8.4修改设置
14.8.5保存配置文件
14.8.6选项搜索路径
14.8.7用接合合并值
14.9日志-报告状态、错误和信息消息
14.9.1应用与库中的日志记录
14.9.2记入文件
14.9.3旋转日志文件
14.9.4详细级别
14.9.5命名日志记录器实例
14.10fileinput-命令行过滤器框架
14.10.1M3U文件转换为RSS
14.10.2进度元数据
14.10.3原地过滤
14.11atexit-程序关闭回调
14.11.1示例
14.11.2什么情况下不调用atexit函数
14.11.3处理异常
14.12sched-定时事件调度器
14.12.1有延迟地运行事件
14.12.2重叠事件
14.12.3事件优先级
14.12.4取消事件
第15章国际化和本地化
15.1gettext-消息编目
15.1.1转换工作流概述
15.1.2由源代码创建消息编目
15.1.3运行时查找消息编目
15.1.4复数值
15.1.5应用与模块本地化
15.1.6切换转换
15.2locale-文化本地化API
15.2.1探查当前本地化环境
15.2.2货币
15.2.3格式化数字
15.2.4解析数字
15.2.5日期和时间
第16章开发工具
16.1pydoc-模块的联机帮助
16.1.1纯文本帮助
16.1.2HTML帮助
16.1.3交互式帮助
16.2doctest-通过文档完成测试
16.2.1开始
16.2.2处理不可预测的输出
16.2.3Traceback
16.2.4避开空白符
16.2.5测试位置
16.2.6外部文档
16.2.7运行测试
16.2.8测试上下文
16.3unittest-自动测试框架
16.3.1基本测试结构
16.3.2运行测试
16.3.3测试结果
16.3.4断言真值
16.3.5测试相等性
16.3.6近似相等
16.3.7测试异常
16.3.8测试固件
16.3.9测试套件
16.4traceback-异常和栈轨迹
16.4.1支持函数
16.4.2处理异常
16.4.3处理栈
16.5cgitb-详细的traceback报告
16.5.1标准traceback转储
16.5.2启用详细traceback
16.5.3traceback中的局部变量
16.5.4异常属性
16.5.5HTML输出
16.5.6记录traceback
16.6pdb-交互式调试工具
16.6.1启动调试工具
16.6.2控制调试工具
16.6.3断点
16.6.4改变执行流
16.6.5用别名定制调试工具
16.6.6保存配置设置
16.7trace-执行程序流
16.7.1示例程序
16.7.2跟踪执行
16.7.3代码覆盖
16.7.4调用关系
16.7.5编程接口
16.7.6保存结果数据
16.7.7选项
16.8profile和pstats-性能分析
16.8.1运行性能分析工具
16.8.2在上下文中运行
16.8.3pstats:保存和处理统计信息
16.8.4限制报告内容
16.8.5调用图
16.9timeit-测量小段Python代码的执行时间
16.9.1模块内容
16.9.2基本示例
16.9.3值存储在字典中
16.9.4从命令行执行
16.10compileall-字节编译源文件
16.10.1编译一个目录
16.10.2编译sys.path
16.10.3从命令行执行
16.11pyclbr-类浏览器
16.11.1扫描类
16.11.2扫描函数
第17章运行时特性
17.1site-全站点配置
17.1.1导入路径
17.1.2用户目录
17.1.3路径配置文件
17.1.4定制站点配置
17.1.5定制用户配置
17.1.6禁用site模块
17.2sys-系统特定的配置
17.2.1解释器设置
17.2.2运行时环境
17.2.3内存管理和限制
17.2.4异常处理
17.2.5底层线程支持
17.2.6模块和导入
17.2.7跟踪程序运行情况
17.3os-可移植访问操作系统特定特性
17.3.1进程所有者
17.3.2进程环境
17.3.3进程工作目录
17.3.4管道
17.3.5文件描述符
17.3.6文件系统权限
17.3.7目录
17.3.8符号链接
17.3.9遍历目录树
17.3.10运行外部命令
17.3.11用os.fork()创建进程
17.3.12等待子进程
17.3.13Spawn
17.3.14文件系统权限
17.4platform-系统版本信息
17.4.1解释器
17.4.2平台
17.4.3操作系统和硬件信息
17.4.4可执行程序体系结构
17.5resource-系统资源管理
17.5.1当前使用情况
17.5.2资源限制
17.6gc-垃圾回收器
17.6.1跟踪引用
17.6.2强制垃圾回收
17.6.3查找无法收集的对象引用
17.6.4回收阈限和代
17.6.5调试
17.7sysconfig-解释器编译时配置
17.7.1配置变量
17.7.2安装路径
17.7.3Python版本和平台
第18章语言工具
18.1warnings-非致命警告
18.1.1分类和过滤
18.1.2生成警告
18.1.3用模式过滤
18.1.4重复的警告
18.1.5候选消息传送函数
18.1.6格式化
18.1.7警告中的栈层次
18.2abc-抽象基类
18.2.1为什么使用抽象基类
18.2.2抽象基类如何工作
18.2.3注册一个具体类
18.2.4通过派生实现
18.2.5abc中的具体方法
18.2.6抽象属性
18.3dis-Python字节码反汇编工具
18.3.1基本反汇编
18.3.2反汇编函数
18.3.3类
18.3.4使用反汇编进行调试
18.3.5循环的性能分析
18.3.6编译器优化
18.4inspect-检查现场对象
18.4.1示例模块
18.4.2模块信息
18.4.3检查模块
18.4.4检查类
18.4.5文档串
18.4.6获取源代码
18.4.7方法和函数参数
18.4.8类层次结构
18.4.9方法解析顺序
18.4.10栈与帧
18.5exceptions-内置异常类
18.5.1基类
18.5.2产生的异常
18.5.3警告类型
第19章模块与包
19.1imp-Python的导入机制
19.1.1示例包
19.1.2模块类型
19.1.3查找模块
19.1.4加载模块
19.2zipimport-从ZIP归档加载Python代码
19.2.1示例
19.2.2查找模块
19.2.3访问代码
19.2.4源代码
19.2.5包
19.2.6数据
19.3pkgutil-包工具
19.3.1包导入路径
19.3.2包的开发版本
19.3.3用PKG文件管理路径
19.3.4嵌套包
19.3.5包数据
部分内容试读
序
今天是2010年的感恩节。不论人们是否身在美国,在这个节日里,大家都一边品尝丰盛的食物,一边欣赏橄榄球比赛,有些人可能会出门逛逛。
对我(以及其他很多人)来说,会借此机会回顾一下过去的岁月,想想那些让我们的生活充满色彩的人和事,向他们致以感谢。当然,我们每天都该这么做,不过专门有一天来表达谢意有时会让我们想得更深远一些。
现在我坐在这里为本书写序,非常感谢能有机会做这件事,不过我想到的不只是本书的内容,也不只是作者本人(一个无比热情的社区成员),我所想的是这个主题本身—Python,具体来讲,还有它的标准库。
当前发布的每版Python都包含数百个模块,它们是多年来多位开发人员针对多个主题和多个任务共同完成的。这些模块涵盖一切,从发送和接收Email,到GUI开发,再到内置的HTTP服务器都一应俱全。就其本身而言,标准库的开发和维护是一项极其庞大的工作。如果没有多年来一直维护它的人们,没有数以千计的人提交补丁、文档和提供反馈,它绝不会成为今天的模样。
这是一个惊人的成就,在Python日益普及的今天(不论是作为语言还是一种生态系统),标准库已经成为其中不可或缺的重要组成部分。如果没有标准库,没有核心团队和其他人员的“内含动力”(batteries included)口号,Python绝对不可能走这么远。它已经被成千上万的人和公司下载,并已安装在数百万服务器、台式机和其他设备上。
即使没有标准库,Python仍是一种很不错的语言,在教学、学习和可读性方面有扎实的基础。基于这些优点,它本身也能发展得足够好。不过标准库把它从一种有趣的体验变成为一个强大而有效的工具。
每一天,全世界的开发人员都在构建工具和完整的应用,他们所基于的只是核心语言和标准库。你不仅要能够明确概念,描述汽车是什么(语言),还要得到足够的部件和工具来自行组装一辆基本的汽车。它可能并不完善,不过可以使你从无到有,这将是一个很好的奖励,会赋予你巨大的动力。我曾反复对那些骄傲地看着我的人说:“看看我构建的应用,除了Python提供的,其他的工具通通都没有用到!”
不过,标准库也不是完美无缺的,它也有自己的缺陷。由于标准库的规模、广度和它的“年龄”,毫无疑问有些模块有不同层次的质量、API简洁性和覆盖性。有些模块存在“特性蔓延”的问题,或者无法跟进其覆盖领域中的最新进展。通过众多不计酬劳的志愿者的帮助和辛勤工作,Python还在继续发展、壮大和改进。
不过,有些人对Python还有争议,不仅由于它的缺点,而且因为标准库并不一定构成其模块涵盖领域中“最顶尖的”解决方案(毕竟,“最佳”是一个不断改变和调整的目标),因而认为应当将它完全舍弃,尽管它还在不断改善。这些人遗漏了一个事实:标准库不仅是促使Python不断成功的一个重要组成部分,而且尽管存在瑕疵,它还是一个绝妙的资源。
不过我有意忽略了一个巨大的领域:文档。标准库的文档很不错,还在继续改进和发展。由于标准库的庞大规模和广度,相应的文档规模也很惊人。在数以千计的开发人员和用户的努力下,我们有成百上千页文档,实在让人佩服。每天都有数万人在使用这些文档创建应用—可能简单到只是一页的脚本,也可能很复杂,比如控制大型机械手的软件。
正是由于文档,我们才会看到本书。所有好的文档和代码都有一个起点—关于目标“是什么”以及“将是什么”要有一个核心概念。从这个内核出发,才有了角色(API)和故事情节(模块)。谈到代码,有时代码会从一个简单的想法开始:“我想解析一个字符串,查找一个日期。”不过等结束时,你可能已经查看了数百个单元测试、函数以及你编写的其他代码,你会坐下来,发现自己构建的东西远远超出了原先的设想。文档也是如此,特别是代码文档。
在我看来,代码文档中最重要的部分就属于这种例子。要写有关一个API中某一部分的描述,你可能会写上几本书,可以用华丽的文字和经过深思熟虑的用例来描述松耦合的接口。不过,如果第一次查看这个描述的用户无法将这些华丽的文字、仔细考量的用例和API签名结合在一起,构建出有意义的应用并解决他们的问题,这一切就完全是徒劳。
人们建立重要连接所用的网关也属于这种例子,这些逻辑会从一个抽象概念跳转到具体的事物。“了解”思想和API是一回事;知道它如何使用则是另外一回事。如果你不仅想要学到东西,还希望改善现状,这会很有帮助。
这就把我们重新引回Python。本书作者Doug Hellmann在2007年创建了一个名为“Python Module of the Week”的博客。在这个博客中,他全面研究了标准库的众多模块,采用一种“示例为先”的方式介绍各个模块如何工作以及为什么。从读到它的第一天起,它就成为我除了核心Python文档之外的又一个必访之地。他的作品已经成为我以及Python社区其他人不可缺少的必备资源。
Doug的文章填补了当前我所看到的Python文档的一个重大空白:对例子的迫切需求。用一种有效而简单的方式展示如何做以及为什么这么做,这绝非易事。我们已经看到,这也是一项很重要、很有价值的工作,对人们每一天的工作都有帮助。人们频繁地给我发邮件,告诉我:“你看过Doug的这个帖子吗?实在太棒了!”或者“为什么这个不能放在核心文档里呢?它能帮助我了解到底是怎么做的!”
当我听说Doug准备花些时间进一步完善他现有的工作,把它变成一本书,让我能把它放在桌子上反复翻阅,以备急用,我真是太兴奋了。Doug是一位非凡的技术作者,而且能敏锐地捕捉到细节。有一整本书专门讲解实际例子,介绍标准库中一百多个模块是如何工作的,而且是他来写这本书,实在让我欣喜若狂。
所以,我要感谢Python,感谢标准库(包括它的瑕疵),感谢我拥有的这个活力充沛有时也存在问题的庞大Python社区。我要感谢核心开发小组的辛勤工作,包括过去、现在,还有将来。我还要感谢这么多社区成员提供的资源、投入的时间和做出的努力,其中Doug Hellmann更是卓越的代表,正是这些让这个社区和生态系统如此生机勃勃。
最后,我要感谢本书。继续向它的作者表示敬意,这本书会在未来几年得到充分利用。
Jesse Noller
Python核心开发人员
PSF Board成员
Nasuni公司首席工程师
关于此书评价
暂无.
书摘内容
第1章
文本
对Python程序员来说,最显而易见的文本处理工具就是string类,不过除此以外,标准库中还提供了大量其他工具,可以帮你轻松地完成高级文本处理。
用Python 2.0之前版本编写的老代码使用的是string模块的函数,而不是string对象的方法。对应这个模块中的每一个函数都有一个等价的方法,新代码已经不再使用那些函数。
使用Python 2.4或以后版本的程序可能会使用string.Template作为一个简便方法,除了具备string或unicode类的特性,还可以对字符串实现参数化。与很多Web框架定义的模板或Python Package Index提供的扩展模块相比,尽管string.Template没有那么丰富的特性,但作为用户可修改的模板,即需要在静态文本中插入动态值,它确实很好地做到了二者兼顾。
textwrap模块包括一些工具,可以对从段落中抽取的文本进行格式化,如限制输出的宽度、增加缩进,以及插入换行符从而能一致地自动换行。
除了string对象支持的内置相等性和排序比较之外,标准库还包括两个与比较文本值有关的模块。re提供了一个完整的正则表达式库,出于速度原因这个库使用C实现。正则表达式非常适合在较大的数据集中查找子串,能够根据比固定字符串更为复杂的模式比较字符串,还可以完成一定程度的解析。
另一方面,difflib则会根据添加、删除或修改的部分来计算不同文本序列之间的具体差别。difflib中比较函数的输出可以用来为用户提供更详细的反馈,指出两个输入中出现变化的地方,一个文档随时间有哪些改变,等等。
……
Python标准库 [The Python Standard Library by Example]最新最全的试读、书评、目录、简介信息由个人博客整理提供。
本文地址:https://my.lmcjl.com/book/596
版权声明:个人博客原创文章,转载请注明出处和网址。
,欢迎加入。
本文链接:https://my.lmcjl.com/post/2886.html
4 评论