python学习笔记16-各种模块和开放工具收集整理
一、调试,性能,日志
Debugger: pdb
Logger: logging
Profilers: profile, hotshot, cProfile
调试模块 pdb 允许你设置(条件)断点,代码逐行执行,检查堆栈。它还支持事后调试。
logging 模块是在 Python2.3 中新增的, 它定义了一些函数和类帮助你的程序实现灵活
的日志系统。共有五级日志级别: 紧急, 错误,警告,信息和调试。
历史上,因为不同的人们为了满足不同的需求重复实现了很多性能测试器,Python 也有好
几个性能测试模块。 最早的 Python profile 模块是Python 写成的,用来测试函数的执行时
间,及每次脚本执行的总时间,既没有特定函数的执行时间也没有被包含的子函数调用时间。
在三个profile 模块中,它是最老的也是最慢的,尽管如此, 它仍然可以提供一些有价值的性
能信息。 hotshot 模块是在Python2.2 中新增的,它的目标是取代profile 模块, 它修复了
profile 模块的一些错误, 因为它是用C 语言写成,所以它有效的提高了性能。 注意 hotshot
重点解决了性能测试过载的问题, 但却需要更多的时间来生成结果。Python2.5 版修复了
hotshot 模块的一个关于时间计量的严重bug。
cProfile 模块是Python2.5 新增的, 它用来替换掉已经有历史的hotshot 和profile 模
块。被作者确认的它的一个较明显的缺点是它需要花较长时间从日志文件中载入分析结果, 不
支持子函数状态细节及某些结果不准。它也是用 C 语言来实现的
二、数字相关模块
在Python 标准库中有不少专门用于处理数值类型对象的模块,它们增强并扩展了内建函数
的功能和数值运算的功能。 要详细了解这些模块,请参阅这些模块的文献或在线文档。
对高级的数字科学计算应用来说,你会对著名的第三方包 Numeric(NumPy) 和SciPy 感兴趣。
关于这两个包的详细请访问下面的网址。
http://numeric.scipy.org/
http://scipy.org/
模块 介绍
decimal 十进制浮点运算类 Decimal
array 高效数值数组(字符,整数,浮点数等等)
math/cmath 标准C库数学运算函数。常规数学运算在match模块,复数运算在cmath模块
operator 数字运算符的函数实现。比如 tor.sub(m,n)等价于 m - n
random 多种伪随机数生成器
三、序列:符串、列表和元组相关模块
模块 内容
array 一种受限制的可变序列类型,要求所有的元素必须都是相同的类型。
copy 提供浅拷贝和深拷贝的能力(详见6.20)
operator 包含函数调用形式的序列操作符,比如operator.concat(m,n)就相当于连
接操作(m+n)。
re Perl 风格的正则表达式查找(和匹配)
StringIO/ 把长字符串作为文件来操作,比如read(),seek()函数等
cStringIO 把长字符串作为文件来操作,比如read(),seek()函数等,C 版的更快一些,但是它不能被继承.
Textwrapa 用作包裹/填充文本的函数,也有一个类
types 包含Python 支持的所有类型
collections 高性能容器数据类型
简单说明
operator 模块除了提供与数字操作符相同的功能外,还提供了与序列类型操作符相同的
功能.types 模块是代表python 支持的全部类型的type 对象的引用。最后,UserList 模块包
含了list 对象的完全的类实现。因为Python 类型不能作为子类,所以这个模块允许用户获得
类似list 的类,也可以派生出新的类或功能
四、文件和输入输出相关模块
模块 内容
base64 提供二进制字符串和文本字符串间的编码/解码操作
binascii 提供二进制和ASCII 编码的二进制字符串间的编码/解码操作
bz2 访问 BZ2 格式的压缩文件
csv 访问 csv 文件(逗号分隔文件)
filecmpb 用于比较目录和文件
fileinput 提供多个文本文件的行迭代器
getopt/optparse 提供了命令行参数的解析/处理
glob/fnmatch 提供 Unix 样式的通配符匹配的功能
gzip/zlib 读写 GNU zip( gzip) 文件(压缩需要 zlib 模块)
shutil 提供高级文件访问功能
c/StringIO 对字符串对象提供类文件接口
tarfile 读写 TAR 归档文件, 支持压缩文件
tempfile 创建一个临时文件(名)
uu 格式的编码和解码
zipfile 用于读取 ZIP 归档文件的工具
简单说明
fileinput 模块遍历一组输入文件, 每次读取它们内容的一行
glob 和 fnmatch 模块提供了老式 Unix shell 样式文件名的模式匹配, 例如使用星号( * )通
配符代表任意字符串, 用问号( ? )匹配任意单个字符.
核心提示: 使用os.path.expanduser() 的波浪号 ( ~ ) 进行扩展
虽然 glob 和 fnmatch 提供了 Unix 样式的模式匹配, 但它们没有提供对波浪号(用户目录)
字符, ~ 的支持. 你可以使用 os.path.expanduser() 函数来完成这个功能, 传递一个带波浪号的
目录, 然后它会返回对应的绝对路径. 这里是两个例子, 分别运行在 Unix 和 Win32 环境下:
>>> os.path.expanduser('~/py')
'/home/wesley/py'
>>> os.path.expanduser('~/py')
'C:\\Documents and Settings\\wesley/py'
另外 Unix 家族系统还支持 "~user" 这样的用法, 表示指定用户的目录. 还有, 注意 Win32
版本函数没有使用反斜杠来分隔目录路径.
gzip 和 zlib 模块提供了对 zlib 压缩库直接访问的接口. gzip 模块是在 zlib 模块上编写
的, 不但实现了标准的文件访问, 还提供了自动的 gzip 压缩/解压缩. bz2 类似于 gzip , 用于
操作 bzip 压缩的文件.
程序员可以通过 1.6 中新增的 zipfile 模块创建, 修改和读取 zip 归档文件. ( tarfile
文件实现了针对 tar 归档文件的相同功能 ). 在 2.3 版本中, Python 加入了导入归档 zip 文件
中模块的功能. 更多细节请参阅 12.5.7 小节.
shutil 模块提供高级的文件访问功能, 包括复制文件, 复制文件的访问权限, 递归地目录树
复制, 等等.
tempfile 模块用于生成临时文件(名).
永久存储模块
pickle 和 marshal 模块
DBM 风格的模块
shelve 模块
核心模块: pickle 和 cPickle
你可以使用 pickle 模块把 Python 对象直接保存到文件里, 而不需要把它们转化为字符串,
也不用底层的文件访问操作把它们写入到一个二进制文件里. pickle 模块会创建一个 Python 语言
专用的二进制格式, 你不需要考虑任何文件细节, 它会帮你干净利索地完成读写对象操作, 唯一需
要的只是一个合法的文件句柄.
pickle 模块中的两个主要函数是 dump() 和 load() . dump() 函数接受一个文件句柄和一个
数据对象作为参数, 把数据对象以特定格式保存到给定文件里. 当我们使用 load() 函数从文件中
取出已保存的对象时, pickle 知道如何恢复这些对象到它们本来的格式. 我们建议你看一看
pickle 和更"聪明"的 shelve 模块, 后者提供了字典式的文件对象访问功能, 进一步减少了程序
员的工作.
cPickle 是 pickle 的一个更快的 C 语言编译版本.
五、错误和异常相关模块
模块 描述
exceptions 内建异常(永远不用导入这个模块)
contextliba 为使用with 语句的上下文对象工具
sys 包含各种异常相关的对象和函数(见sys.ex*)
六、模块相关模块
下边这些模块可能是你在处理 Python 模块导入时会用到的辅助模块。 在这之中,
modulefinder , pkgutil , 以及 zipimport 是 Python 2.3 新增内容, distutils 包在 Python 2.0
被引入。
?? imp - 这个模块提供了一些底层的导入者功能。
?? modulefinder - 该模块允许你查找 Python 脚本所使用的所有模块。你可以使用其中的
ModuleFinder 类或是把它作为一个脚本执行, 提供你要分析的(另个) Python 模块的文件
名。
?? pkgutil - 该模块提供了多种把 Python 包打包为一个"包"文件分发的方法。 类似 site
模块, 它使用 *.pkg 文件帮助定义包的路径, 类似 site 模块使用的 *.pth 文件。
?? site - 和 *.pth 文件配合使用, 指定包加入 Python 路径的顺序, 例如 sys.path ,
PYTHONPATH 。你不需要显式地导入它, 因为 Python 导入时默认已经使用该模块。你可能
需要使用 -S 开关在 Python 启动时关闭它。你也可以完成一些 site 相关的自定义操作,
例如在路径导入完成后在另个地方尝试。
?? zipimport - 你可以使用该模块导入 ZIP 归档文件中的模块。 需要注意的是该功能已经"
自动"开启, 所以你不需要在任何应用中使用它。在这里我们提出它只是作为参考。
?? distutils - 该模块提供了对建立、 安装、分发 Python 模块和包的支持。 它还可以帮助
建立使用 C/C++ 完成的 Python 扩展。 更多关于 distutils 的信息可以在 Python 文档
里找到, 参阅:
http://docs.python.org/dist/dist.html
http://docs.python.org/inst/inst.html
七、面向对象编程相关模块和文档
UserList 和UserDict,还有新的UserString(从Python1.6 版本开始引入)分别代表对列表、字
典、字符串对象进行封装的类定义模块。这些模块的主要用处是提供给用户所需要的功能,这样你
就不必自己动手去实现它们了,同时还可以作为基类,提供子类化和进一步定制的功能。Python 语
言已经为我们提供了大量有用的内建类型,但这种"由你自己定制"类型的附加功能使得Python 语言
更加强大。
在第四章里,我们介绍了Python 语言的标准类型和其它内建类型。types 模块是进一步学习
Python 类型方面知识的好地方,其中的一些内容已超出了本书的讨论范围。types 模块还定义了一
些可以用于进行比较操作的类型对象。(这种比较操作在Python 中很常见,因为它不支持方法的重
载 - 这简化的语言本身,同时又提供了一些工具,为貌似欠缺的地方添加功能.)
最后一个相关模块是operator 模块。这个模块提供了Python 中大多数标准操作符的函数版本。
在某些情况下,这种接口类型比标准操作符的硬编码方式更通用。
模块 说明
UserList 提供一个列表对象的封装类
UserDict 提供一个字典对象的封装类
UserString a 提供一个字符串对象的封装类;它又包括一个MutableString 子类,如果有需
要,可以提供有关功能
types 定义所有Python 对象的类型在标准Python 解释器中的名字
operator 标准操作符的函数接口
itertools 模块被加入, 用来帮助那些发现迭代器威力但又需要一些辅助工具的开发者.
八、执行环境相关模块。
模块 描述
atexita 注册当python 解释器退出时候的执行句柄
popen2 提供额外的在os.popen 之上的功能:(提供通过标准文件和其他的进程交 互
的能力;对于python2.4 和更新的版本,使用subpross)
commands 提供额外的在os.system 之上的功能:把所有的程序输出保存在返回的
字符串中(与输出到屏幕的相反);对于python2.4 和更新的版本,使
用subpross○U
getopt 在这样的应用程序中的处理选项和命令行参数
site 处理site-specific 模块或包
platformb 底层平台和架构的属性
subprocessc 管理(计划替代旧的函数和模块,比如os.system(), os.spawn*(),
os.popen*(), popen2.*, command.*)