python标准库
python标准库
前言
在这之前已经学过《廖雪峰的python教程》,也看过了《flaskweb实战》,之前还看过《head first in python》,又因为对黑客的好奇,看过了《python绝技:运用python成为顶级黑客》这本书。
熟悉语法之后,接下来其实是熟悉标准库。前面看的书,只是勾起我的兴趣。兴趣才是最大的老师呀。
下面是我划分的学习阶段:
语法大概只占了一门语言的1%,然后还有5%是官方库,10%是第三方库, 10%是开源的框架和SDK, 剩下的是背后的思想,算法,操作系统,协议什么的。
廖雪峰的python教程和《head first in python》其实对语法讲的都不细致。只能说看完之后能写代码了,遇到问题再去搜索。暂时选择标准库来看,回头还要再补习全面的语法。
评价
书有点老,10年的,不过不长,只有329页。到处找了下,貌似都是10/06/07的那本。
书上的例子只有2.0下运行通过。我用的2.7,除了极个别的,都运行通过了。
讲的并不深入,就是对python的标准模块有个了解,有个大概的印象。基本上每个模块都给了个简单的例子。
还是推荐阅读下,全面了解下python标准模块对于阅读理解各种第三方模块的源码很有帮助。我个人感觉到的就是python还真是强大,各种功能都有,确实是unix管理者和黑客爱的玩意儿。我估计也会在这条路上走的越来越远。(虽然以前也写了好几年的php,objective-c,java,但从来没有这么认真过。_)
可以搭配着《unix环境高级编程》一起阅读,要不然有些概念是看了完全没有印象的。
代码已经入github
内容
sys
模块可以让你访问解释器相关参数,比如模块搜索路径,解释器版本号等.
operator
模块提供了和内建操作符作用相同的函数.
copy
模块允许你复制对象
核心模块
内置模块__builtin__
apply
, 感觉和js中的apply一样。python中的参数其实大体上只有两种形式,一个是位置参数,另一个是关键字参数。函数参数可以参考廖雪峰的函数的参数
__import__
import 语句,其实是调用的内建的 import 函数。可以根据字符串动态地把module import进来,有啥用呢? 很多框架里面其实都用到了这个。假设你的框架里用了MVC,有个controlers目录,你就可以遍历这个目录,把定义好的名字如UserController.py,等 动态地全部import进来。。而不用一个一个手动去import。
reload
有个注意事项:
注意,当你重加载模块时, 它会被重新编译, 新的模块会代替模块字典里的老模 块. 但是, 已经用原模块里的类建立的实例仍然使用的是老模块(不会被更新).
同样地, 使用 from-import 直接创建的到模块内容的引用也是不会被更新的.
dir
,没啥好说,看帮助文档就用dir和help。
vars
, 这个感觉有也用。运用的好,可以极大地减少代码量。
type
函数,我感觉这个更多地是做类型检查。可以加强代码的健壮性。同时也增加了动态的能力。
__call__
使得类实现变成callable, 具体实现可以参见廖雪峰的Day 5 – 编写Web框架, 这个框架可以看看,其它框架其实也是这个思路。
你不能使用 type 函数来测试一个实例是否属于一个给定的类; 所有 的实例都是同样的类型! 为解决这个问题,有isinstance。
issubclass 检查的是类型树。
eval
,js中也有eval,作用相同。把字符串当成脚本执行。同样都要注意安全问题,字符串可能包含恶意代码。
在python中可以是删除文件。 在js中可以是直接把cookie信息发送到另一个服务器。
在python中,可以通过第二个参数,限定eval能使用的模块。
eval处理简单的表达式,复杂的得用 compile
和exec
函数。
execfile
函数,提供了一个从文件加载代码,编译代码,执行代码 快捷方式。
因为 Python 在检查局部名称空间和模块名称空间前不会检查内建函数, 所以 有时候你可能要显式地引用 __builtin__
模块.(注:就是说你定义的名字,覆盖掉了__builtin__
的东西,想调用原来的东西就得显示引用__builtin__
模块)
exceptions模块
这个我还是建议了解下,当你自定义的异常选择了恰当的父类,会显得你非常专业。
该模块定义了以下标准异常:
- Exception 是所有异常的基类. 强烈建议(但不是必须)自定义的异常异 常也继承这个类.
- SystemExit(Exception) 由 sys.exit 函数引发. 如果它在最顶层没有 被 try-except 语句捕获, 那么解释器将直接关闭而不会显示任何跟踪 返回信息.
- StandardError(Exception) 是所有内建异常的基类(除 SystemExit 外).
- KeyboardInterrupt(StandardError) 在用户按下 Control-C(或其他打 断按键)后 被引发. 如果它可能会在你使用 “捕获所有” 的 try-except 语句时导致奇怪的问题.
- ImportError(StandardError) 在 Python 导入模块失败时被引发.
- EnvironmentError 作为所有解释器环境引发异常的基类. (也就是说,
这些异常一般不是由于程序 bug 引起). - IOError(EnvironmentError) 用于标记 I/O 相关错误.
- OSError(EnvironmentError) 用于标记 os 模块引起的错误.
- WindowsError(OSError) 用于标记 os 模块中 Windows 相关错误.
- NameError(StandardError) 在 Python 查找全局或局部名称失败时被引
发. - UnboundLocalError(NameError) , 当一个局部变量还没有赋值就被使用
时, 会引发这个异常. 这个异常只有在 2.0 及之后的版本有; 早期版本
只会引发一个普通的 NameError . - AttributeError(StandardError) , 当 Python 寻找(或赋值)给一个实
例属性, 方法, 模块功能或其它有效的命名失败时, 会引发这个异常. - SyntaxError(StandardError) , 当解释器在编译时遇到语法错误, 这个
异常就被引发. - (2.0 及以后版本) IndentationError(SyntaxError) 在遇到非法的缩进
时被引发. 该异常只用于 2.0 及以后版本, 之前版本会引发一个 SyntaxError 异常. - (2.0 及以后版本) TabError(IndentationError) , 当使用 -tt 选项检 查不一致缩进时有可能被引发. 该异常只用于 2.0 及以后版本, 之前版 本会引发一个 SyntaxError 异常.
- TypeError(StandardError) , 当给定类型的对象不支持一个操作时被引 发.
- AssertionError(StandardError) 在 assert 语句失败时被引发(即表达 式为 false 时).
- LookupError(StandardError) 作为序列或字典没有包含给定索引或键时 所引发异常的基类.
- IndexError(LookupError) , 当序列对象使用给定索引数索引失败时(不 存在索引对应对象)引发该异常.
- KeyError(LookupError) 当字典对象使用给定索引索引失败时(不存在索 引对应对象)引发该异常.
- ArithmeticError(StandardError) 作为数学计算相关异常的基类.
- OverflowError(ArithmeticError) 在操作溢出时被引发(例如当一个整
数太大, 导致不能符合给定类型). - ZeroDivisionError(ArithmeticError) , 当你尝试用 0 除某个数时被
引发. - FloatingPointError(ArithmeticError) , 当浮点数操作失败时被引发.
- ValueError(StandardError) , 当一个参数类型正确但值不合法时被引
发. - (2.0 及以后版本) UnicodeError(ValueError) , Unicode 字符串类型相
关异常. 只使用在 2.0 及以后版本. - RuntimeError(StandardError) , 当出现运行时问题时引发, 包括在限
制模式下尝试访问外部内容, 未知的硬件问题等等. - NotImplementedError(RuntimeError) , 用于标记未实现的函数, 或无
效的方法. - SystemError(StandardError) , 解释器内部错误. 该异常值会包含更多
的细节 (经常会是一些深层次的东西, 比如 “eval_code2: NULL globals” ) . 这本书的作者编了 5 年程序都没见过这个错误. (想必是 没有用 raise SystemError ). - MemoryError(StandardError) , 当解释器耗尽内存时会引发该异常. 注 意只有在底层内存分配抱怨时这个异常才会发生; 如果是在你的旧机器 上, 这个异常发生之前系统会陷入混乱的内存交换中
os模块
封装了操作系统细节,跨平台用的。
open/file
处理文件
listdir
列出目录列表,需要注意的是并没有包含”.”(当前目录)和”..”(上级目录)两个目录。
getcwd
和 chdir
函数分别用于获得和改变当前工作目录.
makedirs
和 removedirs
函数用于创建或删除目录层。removedirs只能移除空目录。如果目录里有文件,会抛异常。(如果需要删除非空目录, 你可以使用shutil 模块中的 rmtree 函数)
mkdir
和 rmdir
函数只能处理单个目录级
stat
和fstat
函数可以用来获取一个存在文件的信息.(在管道中文件是没有名字的,只能用fstat)
chmod
和 utime
函数修改文件的权限模式和时间属性
system
函数在当前进程下执行一个新命令, 并等待它完成。其实system 就是打开一个新进程(fork),新进程执行命令(exec),父进程等待子进程完成(wait),拿到输出结果。
exec 函数
会使用新进程替换当前进程。基本上exec簇总是和fork在一起的。Flask Web开发 基于Python的Web应用开发实战这本书里,巧妙地在设置环境变量后用exec函数重启应用。
所有的守护进程都没有控制终端,其终端名设置为问号
创建守护进程的方法很简单,先fork复制一个进程,然后把自己退出。这样子进程就成了孤儿进程。
完整的经验规则是:
1. 首先要做的是调用umask将文件模式创建屏蔽字设置为一个已知值(通常是0)。由继承得来的文件模式创建屏蔽字
可能会被设置为拒绝某些权限。
2. 调用fork,然后使父进程exit。这样做实现了下面几点。第一,如果该守护进程是作为一条简单的shell命令启动的,那么
父进程终止会让shell认为这条命令已经执行完毕。第二,虽然子进程继承了父进程的进程组ID,但获得了一个新的进程ID,
这就保证了子进程不是一个进程组的组长长进程。这是下面将要进得的setsid调用的先决条件。
3. 调用setsid创建一个新会话。使进程:a 成为新会话的首进程 b、成为一个新进程组的组长进程。c、没有控制终端
4. 将当前工作目录更改为根目录。从父进程处继承过来的当前工作目录可能是一个挂载的文件系统中。
因为守护进程通常是在系统再引导之前是一直存在的,所以如果守护进程的当前工作目录在一个挂载文件系统中,
那么该文件系统就不能被卸载。
5. 关闭不再需要的文件描述符。
6. 某些守护进程打开/dev/null使其具有文件描述符0、1、2.这样,任何一个试图读标准输入、写标准输出或标准错误的库例程
都不会产生任何效果。
exit
在被捕获异常的情况下,并不会真的终止进程,而_exit
则会。
os.path处理文件名
os.path
模块包含了许多与平台无关的处理长文件名的函数. 也就是说, 你不需要处理前后斜杠, 冒号等
expanduser
把目录中的”~”,解析成实际的用户目录。
expandvars
函数将文件名中的环境变量替换为对应值。
walk
函数会帮你找出一个目录树下的所有文件。感觉类似于find命令。至少可以很方便地利用walk实现find命令。
os.listdir
只列表一级目录。再往下得自己去递归。
文中的DirectoryWalker 并不是generator,而是因为实现了getitem方法,成为了可迭代对象。
其它模块
string
, 字符串估计是要打交道最多的模块了。用的时候,用dir(string)看下有哪些功能。平时用的更多是字符串方法。
re
, 正则表达式语法没啥。关键是知道正达式是啥,语法反而不重要。推荐看下《精通正则表达式》,讲的很透彻。这里要吐槽下Java的正则表达式。。有次项目里居然在正则表达式这里挂了,因为匹配失败,居然迭代了几十亿次,直接导致后面的代码没机会执行(参考:http://blog.csdn.net/shixing_11/article/details/5997567),阿里还有人专门自己写了个java的正则表达式。
math
模块实现了许多对浮点数的数学运算函数. 这些函数一般是对平台 C 库 中同名函数的简单封装
cmath
模块实现复数的计算。
operator
模块为 Python 提供了一个 “功能性” 的标准操作符接口
需要注意的是单个字符也是序列。在使用时得注意下。
copy
模块提供拷贝功能。分浅拷贝和深拷贝。copy.copy是浅拷贝,copy.deepcopy是深拷贝。
sys
模块提供了许多函数和变量来处理 Python 运行时环境的不同部分。在命令行脚本中用提比较多。
* sys.argv, sys.path, sys.builtin_module_names,sys.modules。标准库可以多用下help和 dir来获取信息。
* python通过引用计数来管理的内存,引用计数可以通过sys.getrefcount获取到。
* 可以通过sys.platform判断当前是啥系统,然后写针对该系统的特定代码。
* sys.setprofile函数允许你配置一个分析函数(profiling function). 这个函数 会在每次调用 某个函数或方法时被调用(明确或隐含的), 或是遇到异常的时候 被调用。适宜做分析工具,基于该函 数, profile 模块提供了一个完整的分析器框架.
* sys.settrace, pdb基于这个实现的。
* sys.stdin,sys.stdout,sys.stderr 要重定向输出只要创建一个对象, 并实现它的 write 方法.
* sys.exit退出程序,可捕获。
* sys.exitfunc,可以在exit之前做一些清理操作。。感觉是那些不会自动释放的资源有必要用这个东西来做。
atexit
对sys.exitfunc封装了一下,可以方便地注册多个退出钩子函数。后注册的先调用。
time
模块 提供了获取当前时间,字符串到时间对象的相互转换。
types
模块包含了标准解释器定义的所有类型的类型对象
gc
模块,提供了到内建循环垃圾收集器的接口。gc.collect用来回收自引用的数据结构的对象。
更多标准模块
fileinput
模块允许你循环一个或多个文本文件的内容。利用glob.glob可以模糊搜索文件,然后利用fileinput模块可以把文件统一处理。shutil
模块 shell util?shutil 实用模块包含了一些用于复制文件和文件夹的函数.可以删除非空目录哦,os.removedirs可不行。tempfile
模块。tempfile.mktemp其实并不安全,在获取临时文件名和创建文件之间有个时间窗口,在这期间可能有其它程序创建了同名文件。不如用tempfile.TemporaryFile()StringIO
模块。提供了内建文件一样的函数,区别是在内存中执行,速度会很快。当然由于受到内存的限制,不能处理过大的文件。cStringIO
模块是StringIO
更快速的实现。mmap
模块提供了操作系统内存映射函数的接口。把文件的数据 映射到一块内存操作。效率很高。具体概念请看内存映射文件原理UserDict
模块包含了一个可继承的字典类 (事实上是对内建字典类型的 Python 封装).UserList
模块包含了一个可继承的列表类 (事实上是对内建列表类型的 Python 封装).UserString
模块包含两个类, UserString 和 MutableString .MutableString性能不高,不如用array模块traceback
模块允许你在程序里打印异常的跟踪返回 (Traceback)信息, 类似未捕获异常时解释器所做的。可以使用 traceback.extract_tb 函数格式化跟踪返回信息, 得到包含错误信息的列表errno
模块定义了许多的符号错误码, 比如 ENOENT (“没有该目录入口”) 以及 EPERM (“权限被拒绝”).getopt
模块包含用于抽出命令行选项和参数的函数, 它可以处理多种格式的选 项。在python绝技:运用python成为顶级黑客中用的挺多,不过书里用的是optparse,现在应该用getopt了。getpass
模块提供了平台无关的在命令行下输入密码的方法. 在做需要命令行用户认证时有用。glob
根据给定模式生成满足该模式的文件名列表, 和 Unix shell 相同.星号(* ) 匹配零个或更多个字符, 问号(? ) 匹配单个字符. 你也可以使用方括号来指定字符范围, 例如 [0-9] 代表一个数字. 其他所有字符都代表它们本身。fnmatch
模块使用模式来匹配文件名. glob是根据模式返回文件名列表。fnmatch是用模式来判断文件名是否匹配模式,返回True/False。fnmatch.translate可以把模式转成正则表达式。glob 和 find 模块在内部使用 fnmatch 模块来实现.random
模块包含许多随机数生成器。choice随机挑选,shuffle打乱。gauss (高斯)函数来生成满足高斯分的布随机数字(是伪随机生成器,并不适合密码学用途)md5
(Message-Digest Algorithm 5)模块用于计算信息密文(信息摘要). 新版用hashlib。工作中基本是用的16进制的,即hexdigest。sha
模块提供了计算信息摘要(密文)的另种方法。已过期,新版用hashlib。crypt
模块实现了单向的 DES 加密, Unix 系统使用这个 加密算法来储存密码, 这个模块真正也就只在检查这样的密码时有用.密码验证一定得用不可逆的加密算法,这样即使暴库,也不至于泄露密码。即使这样也应该提供salt,不同的密码用不同的salt,这样防止别人搞一个md5库和crypt库暴力反解(彩虹库暴力破解)。crypt-example-2.py在mac上测试失败,密码都是*
号,同时获取密码最不好不用raw_input,用getpass模块比较好,不会在屏幕上回显密码zlib
模块为 “zlib” 压缩提供支持。compress 和 decompress 提供压缩和解压。在python绝技:运用python成为顶级黑客中用到了,用来暴力破解。在内容少的时候,经过压缩文件反而变大了,呃。。code
模块提供了一些用于模拟标准交互解释器行为的函数。类似功能的还有eval
、compile
和exec
函数、execfile
模块
线程和进程
为了保证两个线程可以同时访问相同的内部数据, Python 使用了 global interpreter lock (全局解释器锁) . 在同一时间只可能有一个线程执行 Python 代码;(这意味着python不能运用到多核CPU的威力,真要用只能使用多进程了。)
threading
模块为线程提供了一个高级接口。
Queue
模块提供了一个线程安全的队列 (queue) 实现.
thread
模块提为线程提供了一个低级 (low_level) 的接口.注意当主程序退出的时候, 所有的线程也随着退出. 而 threading 模块不存在 这个问题 . (该行为可改变)
commands
模块(仅适应unix)包含一些用于执行外部命令的函数
pipes
模块(只用于 Unix)提供了 “转换管道 (conversion pipelines)” 的支持. 你可以创建包含许多外部工具调用的管道来处理多个文件.
popen2
模块允许你执行外部命令, 并通过流来分别访问它的 stdin 和 stdout ( 可能还有 stderr ). popen2已经被subprocess替代。
signal
模块配置你自己的信号处理器 (signal handler)
数据表示
marshal 和 pickle 模块用于在不同的 Python 程序间共享/传递数据.
marshal 模块使用了简单的自描述格式( Self-Describing Formats ), 它支持 大多的内建数据类型, 包括 code 对象. Python 自身也使用了这个格式来储存 编译后代码( .pyc 文件).
pickle 模块提供了更复杂的格式, 它支持用户定义的类, 自引用数据结构等等. pickle 是用 Python 写的, 相对来说速度较慢, 不过还有一个 cPickle 模块, 使用 C 实现了相同的功能, 速度和 marshal 不相上下.
array
模块实现了一个有效的阵列储存类型. 阵列和列表类似, 但其中所有的 项目必须为相同的类型. 该类型在阵列创建时指定.struct
模块用于转换二进制字符串和 Python 元组. pack 函数接受格式字符串以及额外参数, 根据指定格式将额外参数转换为二进制字符串. upack 函数 接受一个字符串作为参数, 返回一个元组.xdrlib
模块用于在 Python 数据类型和 Sun 的 external data representation (XDR) 间相互转化marshal
模块可以把不连续的数据组合起来 – 与字符串相互转化, 这样它们就 可以写入文件或是在网络中传输.pickle
模块同 marshal 模块相同, 将数据连续化, 便于保存传输. 它比 marshal 要慢一些, 但它可以处理类实例, 共享的元素, 以及递归数据结构等,pickle 不能处理 code 对象cPickle
模块是针对 pickle 模块的一个更快的实现.copy_reg
模块注册你自己的扩展类型.这样 pickle 和 copy 模 块就会知道如何处理非标准类型.pprint
模块( pretty printer )用于打印 Python 数据结构.repr
模块提供了内建 repr 函数的另个版本. 它限制了很多(字符串长度, 递 归等).base64
base64 编码体系用于将任意二进制数据转换为纯文本. 它将一个 3 字节的二 进制字节组转换为 4 个文本字符组储存, 而且规定只允许以下集合中的字符出 现:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789+/
另外, = 用于填充数据流的末尾. 有时我们会把base64作为url的参数传输,这时要注意末尾的=号要处理下。binhex
模块用于到 Macintosh BinHex 格式的相互转化.quopri
模块基于 MIME 标准实现了引用的可打印编码uu
uu 编码体系用于将任意二进制数据转换为普通文本格式. 该格式在新闻组中很 流行, 但逐渐被 base64 编码取代.binascii
binascii 提供了多个编码的支持函数, 包括 base64 , binhex , 以及 uu
文件格式
xmllib
模块. 已经被xml.sax替代。xml.parsers.expat
模块是 James Clark’s Expat XML parser 的接口.sgmllib
模块, 提供了一个基本的 SGML 语法分析器. 它与 xmllib 分析器基 本相同, 但限制更少(而且不是很完善).htmlib
模块包含了一个标签驱动的( tag-driven ) HTML 语法分析器, 它会将数据发送至一个格式化对象.htmlentitydefs
模块包含一个由 HTML 中 ISO Latin-1 字符实体构成的字典.formatter
模块提供了一些可用于 htmllib 的格式类( formatter classes ).这些类有两种, formatter 和 writer . formatter 将 HTML 解析器的标签和数 据流转换为适合输出设备的事件流( event stream ), 而 writer 将事件流输出 到设备上.ConfigParser
模块用于读取配置文件.格式类似于ini文件。netrc
模块可以用来解析 .netrc 配置文件。该文件 用于在用户的 home 目录储存 FTP 用户名和密码. (别忘记设置这个文件的属 性为: “chmod 0600 ~/.netrc,” 这样只有当前用户能访问).shlex
模块为基于 Unix shell 语法的语言提供了一个简单的 lexer (也就是 tokenizer).zipfile
模块可以用来读写 ZIP 格式.gzip
模块用来读写 gzip 格式的压缩文件.
邮件和新闻消息处理
rfc822
模块包括了一个邮件和新闻组的解析器 (也可用于其它符合 RFC 822 标准的消息, 比如 HTTP 头).
通常, RFC 822 格式的消息包含一些标头字段, 后面至少有一个空行, 然后是信 息主体.mimetools
模块包含一些读写 MIME 信息的工具. 它还提供了一个类似 rfc822 模块中 Message 的类, 用于处理 MIME 编码的信息.MimeWriter
模块用于生成符合 MIME 邮件标准的 “multipart” 的信息。已被email
模块替代。mailbox
模块用来处理各种不同类型的邮箱格式。mailcap
模块用于处理 mailcap 文件, 该文件指定了不同的文档格式的处理方 法( Unix 系统下).mimetypes
模块可以判断给定 url ( uniform resource locator , 统一资源定 位符) 的 MIME 类型. 它基于一个内建的表, 还可能搜索 Apache 和 Netscape 的配置文件packmail
模块可以用来创建 Unix shell 档案. 已经废弃mimify
模块用于在 MIME 编码的文本信息和普通文本信息(例如 ISO Latin 1 文本)间相互转换.已被email
模块替代。multifile
模块允许你将一个多部分的 MIME 信息的每部分作为单独的文件处理2.5之后废弃
网络协议(这个是web开发需要关注的重点)
socket
模块实现了到 socket 通讯层的接口. 你可以使用该模块创建客户端或 是服务器的 socketselect
模块允许你检查一个或多个 socket , 管道, 以及其他流兼容对象所接 受的数据。asyncore
模块提供了一个 “反馈性的( reactive )” socket 实现. 该模块允许 你定义特定过程完成后所执行的代码, 而不是创建 socket 对象, 调用它们的方法. 你只需要继承 dispatcher 类, 然后重载如下方法 (可以选择重载某一 个或多个)就可以实现异步的 socket 处理器.- handle_connect : 一个连接成功建立后被调用.
- handle_expt : 连接失败后被调用.
- handle_accept : 连接请求建立到一个监听 socket 上时被调用. 回调时( callback )应该使用 accept 方法来获得客户端 socket .
- handle_read : 有来自 socket 的数据等待读取时被调用. 回调时应该使用 recv 方法来获得数据.
- handle_write : socket 可以写入数据的时候被调用. 使用 send 方法写入数据.
- handle_close : 当 socket 被关闭或复位时被调用.
- handle_error(type, value, traceback) 在任何一个回调函数发生Python 错误时被调用. 默认的实现会打印跟踪返回消息到 sys.stdout .
asynchat
模块是对 asyncore 的一个扩展. 它提供对面向行( line-oriented ) 的协议的额外支持. 它还提供了增强的缓冲区支持(通过 push 方法和 “producer” 机制.urlib
模块为 HTTP , FTP , 以及 gopher 提供了一个统一的客户端接口. 它会 自动地根据 URL 选择合适的协议处理器.urlparse
模块包含用于处理 URL 的函数, 可以在 URL 和平台特定的文件名间 相互转换cookie
模块为 HTTP 客户端和服务器提供了基本的 cookie 支持.robotparser
模块用来读取 robots.txt 文件. 做为一个有良心的爬虫,最好还是遵循下robot协议。ftplib
模块包含了一个 File Transfer Protocol (FTP , 文件传输协议)客户 端的实现.gopherlib
模块包含了一个 gopher 客户端实现.Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,现在已经过时。httplib
模块提供了一个 HTTP 客户端接口poplib
模块(如 Example 7-28 所示) 提供了一个 Post Office Protocol( POP3 协议) 客户端实现. 这个协议用来从邮件服务器 “pop” (拷贝) 信息到 你的个人电脑.imaplib
模块提供了一个 Internet Message Access Protocol ( IMAP, Internet 消息访问协议) 的客户端实现. 这个协议允许你访问邮件服务器的邮件目录, 就好像是在本机访问一样.smtplib
模块提供了一个 Simple Mail Transfer Protocol (SMTP , 简单邮件 传输协议) 客户端实现. 该协议用于通过 Unix 邮件服务器发送邮件。 读取邮件请使用 poplib 或 imaplib 模块.telnetlib
模块提供了一个 telnet 客户端实现.nntplib
模块提供了一个网络新闻传输协议( Network News Transfer Protocol, NNTP,网络新闻传输协议)客户端的实现.SocketServer
为各种基于 socket 的服务器提供了一个框架. 该模块提供了大量的类, 你可以用它们来创建不同的服务器.BaseHTTPServer
模块,这是一个建立在 SocketServer 框架上的基本框架, 用于 HTTP 服务器.SimpleHTTPServer
模块是一个简单的 HTTP 服务器, 它提供了标准的 GET 和 HEAD 请求处理器.CGIHTTPServer
模块是一个可以通过公共网关接口( common gateway interface , CGI )调用外部脚本的 HTTP 服务器.cgi
模块为 CGI 脚本提供了函数和类支持. 它还可以处理 CGI 表单数据.webbrowser
模块提供了一个到系统标准 web 浏览器的接口. 哈。居然调起了chrome在打开页面。。
国际化
locale
模块提供了 C 本地化( localization )函数的接口unicodedata
模块包含了 Unicode 字符的属性, 例如字符类别, 分解数据, 以及数值ucnhash
模块为一些 Unicode 字符代码提供了特定的命名. 你可以直接使用 \N{} 转义符将 Unicode 字符名称映射到字符代码上.
##多媒体相关模块imghdr
模块可识别不同格式的图片文件. 当前版本可以识别 bmp , gif , jpeg , pbm , pgm , png , ppm , rast (Sun raster), rgb (SGI), tiff , 以及 xbm 图 像.sndhdr
模块, 可来识别不同的音频文件格式, 并提取文件内容相关信息aifc
模块用于读写 AIFF 和 AIFC 音频文件(在 SGI 和 Macintosh 的计算机 上使用).sunau
模块用于读写 Sun AU 音频文件sunaudio
模块用于识别 Sun AU 音频文件, 并提取其基本信息. sunau 模块为 Sun AU 文件提供了更完成的支持.wave
模块用于读写 Microsoft WAV 音频文件audiodev
为 Sun 和 SGI 计算机提供了音频播放支持.(only unix)winsound
模块允许你在 Winodws 平台上播放 Wave 文件.(only windows)
数据储存
Python 提供了多种相似数据库管理( database manager )的驱动, 它们的模型 都基于 Unix 的 dbm 库.
anydbm
模块为简单数据库驱动提供了统一标准的接口.anydbm 模块会自动寻找一个合适的数据库驱动, 按照 dbhash , gdbm , dbm , 或 dumbdbm 的顺序尝试. 如果没有找到任何模块, 它 将引发一个 ImportError 异常.whichdb
模块可以判断给定数据库文件的格式。shelve
模块使用数据库驱动实现了字典对象的持久保存. shelve 对象使用字 符串作为键, 但值可以是任意类型, 所有可以被 pickle 模块处理的对象都可 以作为它的值.dbhash
模块为 bsddb 数据库驱动提供了一个 dbm 兼容的接口dbm
模块提供了一个到 dbm 数据库驱动的接口(在许多 Unix 平台上都 可用)dumbdbm
模块是一个简单的数据库实现, 与 dbm 一类相似, 但使用纯 Python 实现. 它使用两个文件: 一个二进制文件 (.dat ) 用于储存数据, 一个文本文 件 (.dir ) 用于数据描述.gdbm
模块提供了到 GNU dbm 数据驱动的接口
##工具和实用程序
标准库中有一些模块既可用作模块又可以作为命令行实用程序.dis
模块是 Python 的反汇编器. 它可以把字节码转换为更容易让人看懂的格式。个人觉得要成为真正的大师,汇编一定得学学。我在mac上,python2.7 并不能直接dis.py hello.py, 改成python -m dis hello.py可以pdb
模块是标准 Python 调试器( debugger ). 它基于 bdb 调试器框架.bdb
模块为提供了一个调试器框架. 你可以使用它来创建自定义的调试器profile
模块是标准 Python 分析器.pstats
模块用于分析 Python 分析器收集的数据tabnanny
模块用于检查 Python 源文件中的含糊的缩进. 当文件 混合了 tab 和空格两种缩进时候, nanny (保姆)会立即给出提示.
##其它模块fcntl
模块(只用于 Unix)为 Unix 上的 ioctl 和 fcntl 函数提供了一个接口. 它们用于文件句柄和 I/O 设备句柄的 “out of band” 操作, 包括读取扩展属性, 控制阻塞. 更改终端行为等等.pwd
(只用于 Unix) 提供了一个到 Unix 密码/password “数据库”( /etc/passwd 以及相关文件 )的接口grp
模块(只用于 Unix) 提供了一个到 Unix 用户组/group ( /etc/group )数 据库的接口.nis
模块 This module contains functions for accessing NIS maps.curses
模块 The curses module provides an interface to the curses library, the de-facto standard for portable advanced terminal handling.termios
模块 (只用于 Unix , 可选) termios 为 Unix 的终端控制设备提供了一个接口. 它可用于控制终端通讯端口的大多方面.tty
模块(只用于 Unix) 包含一些用于处理 tty 设备的工具函数。resource
模块(只用于 Unix , 可选) 用于查询或修改当前系统资源限制设置.syslog
模块(只用于 Unix 可选) 用于向系统日志设备发送信息( syslogd ). 这些信息如何处理依不同的系统而定, 通常会被记录在一个 log 文件中, 例如 /var/log/messages , /var/adm/syslog , 或者其他类似处理.msvcrt
模块(只用于 Windows/DOS ) 用于访问 Microsoft Visual C/C++ Runtime Library (MSVCRT) 中函数的方法.nt
模块(非直接使用模块, 只用于 Windows ) nt 模块是 os 模块在 Windows 平台下调 用的执行模块. 几乎没有任何原因直接使用这个模块, 请使用 os 模块替代._winreg
模块(只用于 Windows , 2.0 中新增) _winreg 模块提供了访问 Windows 注册表数 据库的一个基本接口.posix
模块(非直接使用模块, 只用于 Unix/POSIX ) posix 模块是 os 模块在 Unix 及其 他 POSIX 系统下使用的实现模块. 一般只需要通过 os 模块访问它即可.
执行支持模块
dospath
模块提供了 DOS 平台下的 os.path 功能macpath
模块( 参见 Example 13-2 )提供了 Macintosh 平台下的 os.path 功 能. 你也可以使用它在其他平台处理 Macintosh 路径.ntpath
模块( 参见 Example 13-3 )提供了 Windows 平台下的 os.path 功能. 你也可以使用它在其他平台处理 Windows 路径.posixpath
模块( 参见 Example 13-4 )提供了 Unix 和其他 POSIX 兼容平台下 的 os.path 功能imp
模块包含的函数可以用于实现自定义的 import 行为new
模块是一个底层的模块, 你可以使用它来创建不同的内建对象, 例如类对 象, 函数对象, 以及其他由 Python 运行时系统创建的类型.py_compile
模块用于将 Python 模块编译为字节代码. 它和 Python 的 import 语句行为类似, 不过它接受文件名而不是模块名作为参数compileall
模块用于将给定目录下(以及 Python path )的所有 Python 脚本编 译为字节代码. 它也可以作为可执行脚本使用(在 Unix 系统下, Python 安装 时会自动调用执行它).ihooks
模块为替换导入提供了一个框架. 这允许多个导入机制共存.linecache
模块用于从模块源文件中读取代码. 它会缓存最近访问的模块 (整 个源文件).traceback 模块使用这个模块实现了对导入操作的跟踪.macurl2path
模块用于 URL 和 Macintosh 文件名的相互映射. 一般没有必要直接使用它, 请使用 urllib 中的机制.nturl2path
模块用于 URL 和 Windows 文件名的相互映射.tokenize
模块将一段 Python 源文件分割成不同的 token . 你可以在代码高亮工具中使用它.keyword
模块有一个包含当前 Python 版本所使用的关键字的列表. 它还提供了一个字典, 以关键字作为key, 以一个描述性函数作为value, 它可用于检查给定单词是否是 Python 关键字.parser
模块提供了一个到 Python 内建语法分析器和编译器的接口symbol
模块包含 Python 语法中的非终止符号. 可能只有你涉及 parser 模块 的时候用到它token
模块包含标准 Python tokenizer 所使用的 token 标记.
其它模块(少用)
pyclbr
模块包含一个基本的 Python 类解析器filecmp
模块用于比较文件和目录cmd
模块为命令行接口( command-line interfaces , CLI )提供了一个简单的 框架. 它被用在 pdb 模块中, 当然你也可以在自己的程序中使用它。你只需要继承 Cmd 类, 定义 do 和 help 方法. 基类会自动地将这些方法转换 为对应命令.readline
模块使用 GNU readline 库(或兼容库)实现了 Unix 下增强的 输入编辑支持rlcompleter
模块为 readline 模块提供了单词自动完 成功能.statvfs
模块包含一些与 os.statvfs (可选)函数配合使用的常量和函数, 该 函数会返回文件系统的相关信息calendar
模块是 Unix cal 命令的 Python 实现. 它可以将给定年份/月份的 日历输出到标准输出设备上.sched
模块为非线程环境提供了一个简单的计划任务模式statcache
模块提供了访问文件相关信息的相关函数. 它是 os.stat 的扩展模 块, 而且它会缓存收集到的信息.2.7没看到grep
模块提供了在文本文件中搜索字符串的另种方法已经废弃bisect
模块用于向排序后的序列插入对象.insort(sequence, item) 将条目插入到序列中, 并且保证序列的排序. 序列可 以是任意实现了__getitem__
和 insert 方法的序列对象.
其它废弃的模块没写了。