Python标准库——走马观花
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
Python 有一套很有用的标准库(standard library)。标准库会随着 Python 解释器,一起安装在你的电脑中的。它是 Python 的一个组成部分。这些标准库是 Python 为你准备好的利器,可以让编程事半功倍。
我将根据我个人的使用经验中,挑选出标准库三个方面的包 (package) 介绍:
- Python 增强
- 系统互动
- 网络
第一类:Python 增强
Python 自身的已有的一些功能可以随着标准库的使用而得到增强。
1) 文字处理
Python 的 string 类提供了对字符串进行处理的方法。更进一步,通过标准库中的 re 包,Python 可以用正则表达式 (regular expression)来处理字符串。
正则表达式是一个字符串模板。Python 可以从字符中搜查符合该模板的部分,或者对这一部分替换成其它内容。比如你可以搜索一个文本中所有的数字。正则表达式的关键在于根据自己的需要构成模板。
此外,Python 标准库还为字符串的输出提供更加丰富的格式, 比如: string 包,textwrap 包。
2) 数据对象
不同的数据对象,适用于不同场合的对数据的组织和管理。Python 的标准库定义了表和词典之外的数据对象,比如说数组 (array),队列(Queue)。一个熟悉数据结构(data structure) 的 Python 用户可以在这些包中找到自己需要的数据结构。
此外,我们也会经常使用 copy 包,以复制对象。
3) 日期和时间
日期和时间的管理并不复杂,但容易犯错。Python 的标准库中对日期和时间的管理颇为完善(利用 time 包管理时间,利用 datetime 包管理日期和时间),你不仅可以进行日期时间的查询和变换(比如:2012 年 7 月 18 日对应的是星期几),还可以对日期时间进行运算 (比如 2000.1.1 13:00 的 378 小时之后是什么日期,什么时间)。通过这些标准库,还可以根据需要控制日期时间输出的文本格式 (比如:输出’2012-7-18‘还是 '18 Jul 2012')
4) 数学运算
标准库中,Python 定义了一些新的数字类型 (decimal 包, fractions 包), 以弥补之前的数字类型(integer, float) 可能的不足。标准库还包含了 random 包,用于处理随机数相关的功能(产生随机数,随机取样等)。math 包补充了一些重要的数学常数和数学函数,比如 pi,三角函数等等。
(尽管 numpy 并不是标准库中的包,但它的数组运算的良好支持,让它在基于 Python 的科研和计算方面得到相当广泛的应用,可以适当关注。)
5) 存储
之前我们的快速教程中,只提及了文本的输入和输出。实际上,Python 可以输入或输出任意的对象。这些对象可以通过标准库中的pickle包转换成为二进制格式 (binary),然后存储于文件之中,也可以反向从二进制文件中读取对象。
此外,标准库中还支持基本的数据库功能 (sqlite3 包)。XML 和 csv 格式的文件也有相应的处理包。
第二类:系统互动
系统互动,主要指 Python 和操作系统 (operate system)、文件系统(file system) 的互动。Python 可以实现一个操作系统的许多功能。它能够像 bash 脚本那样管理操作系统,这也是 Python 有时被成为脚本语言的原因。
1) Python 运行控制
sys 包被用于管理Python 自身的运行环境。Python 是一个解释器 (interpreter), 也是一个运行在操作系统上的程序。我们可以用 sys 包来控制这一程序运行的许多参数,比如说 Python 运行所能占据的内存和 CPU, Python 所要扫描的路径等。另一个重要功能是和 Python 自己的命令行互动,从命令行读取命令和参数。
2) 操作系统
如果说 Python 构成了一个小的世界,那么操作系统就是包围这个小世界的大世界。Python 与操作系统的互动可以让 Python 在自己的小世界里管理整个大世界。
os 包是 Python 与操作系统的接口。我们可以用 os 包来实现操作系统的许多功能,比如管理系统进程,改变当前路径 (相当于’cd‘),改变文件权限等,建立。但要注意,os 包是建立在操作系统的平台上的,许多功能在 Windows 系统上是无法实现的。另外,在使用 os 包中,要注意其中的有些功能已经被其他的包取代。
我们通过文件系统来管理磁盘上储存的文件。查找、删除,复制文件,以及列出文件列表等都是常见的文件操作。这些功能经常可以在操作系统中看到(比如 ls, mv, cp 等 Linux 命令),但现在可以通过 Python 标准库中的 glob 包、shutil 包、os.path 包、以及 os 包的一些函数等,在 Python 内部实现。
subprocess 包被用于执行外部命令,其功能相当于我们在操作系统的命令行中输入命令以执行,比如常见的系统命令 'ls' 或者 'cd',还可以是任意可以在命令行中执行的程序。
4) 线程与进程
Python 支持多线程(threading 包) 运行和多进程(multiprocessing 包) 运行。通过多线程和多进程,可以提高系统资源的利用率,提高计算机的处理速度。Python 在这些包中,附带有相关的通信和内存管理工具。此外,Python 还支持类似于 UNIX 的 signal 系统,以实现进程之间的粗糙的信号通信。
第三类:网络
现在,网络功能的强弱很大程度上决定了一个语言的成功与否。从 Ruby, JavaScript, php 身上都可以感受到这一点。Python 的标准库对互联网开发的支持并不充分,这也是 Django 等基于 Python 的项目的出发点: 增强 Python 在网络方面的应用功能。这些项目取得了很大的成功,也是许多人愿意来学习 Python 的一大原因。但应注意到,这些基于 Python 的项目也是建立在 Python 标准库的基础上的。
1) 基于 socket 层的网络应用
socket 是网络可编程部分的底层。通过 socket 包,我们可以直接管理 socket,比如说将 socket 赋予给某个端口 (port),连接远程端口,以及通过连接传输数据。我们也可以利用 SocketServer 包更方便地建立服务器。
通过与多线程和多进程配合,建立多线程或者多进程的服务器,可以有效提高服务器的工作能力。此外,通过 asyncore 包实现异步处理,也是改善服务器性能的一个方案。
2) 互联网应用
在实际应用中,网络的很多底层细节(比如 socket)都是被高层的协议隐藏起来的。建立在 socket 之上的http 协议实际上更容易也更经常被使用。http 通过 request/responce 的模式建立连接并进行通信,其信息内容也更容易理解。Python 标准库中有 http 的服务器端和客户端的应用支持 (BaseHTTPServer 包; urllib 包, urllib2 包), 并且可以通过 urlparse 包对 URL(URL 实际上说明了网络资源所在的位置)进行理解和操作。
以上的介绍比较粗糙,只希望能为大家提供一个了解标准库的入口。欢迎大家一起分享标准库的使用经验。