Python 标准库示例说明

Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。

操作系统接口

os模块提供了不少与操作系统相关联的函数。

>>> import os
>>> os.getcwd()      # 返回当前的工作目录
'C:\\Python34'
>>> os.chdir('/server/accesslogs')   # 修改当前的工作目录
>>> os.system('mkdir today')   # 执行系统命令 mkdir 
0

建议使用 “import os” 风格而非 “from os import *”。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。

在使用 os 这样的大型模块时内置的 dir() 和 help() 函数非常有用:

>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>

针对日常的文件和目录管理任务,:mod:shutil 模块提供了一个易于使用的高级接口:

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')
文件通配符

glob模块提供了一个函数用于从目录通配符搜索中生成文件列表:

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']
命令行参数

通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量。例如在命令行中执行 “python demo.py one two three” 后可以得到以下输出结果:

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']
错误输出重定向和程序终止

sys 还有 stdin,stdout 和 stderr 属性,即使在 stdout 被重定向时,后者也可以用于显示警告和错误信息。

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

大多脚本的定向终止都使用 “sys.exit()”。

字符串正则匹配

re模块为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单,易于阅读和调试:

>>> 'tea for too'.replace('too', 'two')
'tea for two'
数学

math模块为浮点运算提供了对底层C函数库的访问:

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

random提供了生成随机数的工具。

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4
访问 互联网

有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib:

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.
...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
...         print(line)

<BR>Nov. 25, 09:43:32 PM EST

>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()

注意第二个例子需要本地有一个在运行的邮件服务器。

#处理get请求,不传data,则为get请求

import urllib
from urllib.request import urlopen
from urllib.parse import urlencode

url='http://www.ai8py.com/login'
data={"username":"admin","password":123456}
req_data=urlencode(data)#将字典类型的请求数据转变为url编码
res=urlopen(url+'?'+req_data)#通过urlopen方法访问拼接好的url
res=res.read().decode()#read()方法是读取返回数据内容,decode是转换返回数据的bytes格式为str

print(res)
#处理post请求,如果传了data,则为post请求

import urllib
from urllib.request import Request
from urllib.parse import urlencode

url='http://www.ai8py.com/login'
data={"username":"admin","password":123456}
data=urlencode(data)#将字典类型的请求数据转变为url编码
data=data.encode('ascii')#将url编码类型的请求数据转变为bytes类型
req_data=Request(url,data)#将url和请求数据处理为一个Request对象,供urlopen调用
with urlopen(req_data) as res:
    res=res.read().decode()#read()方法是读取返回数据内容,decode是转换返回数据的bytes格式为str

print(res)
日期和时间

datetime模块为日期和时间处理同时提供了简单和复杂的方法。

支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。

该模块还支持时区处理:

>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

常用时间处理方法

  • 今天 today = datetime.date.today()
  • 昨天 yesterday = today - datetime.timedelta(days=1)
  • 上个月 last_month = today.month - 1 if today.month - 1 else 12
  • 当前时间戳 time_stamp = time.time()
  • 时间戳转datetime datetime.datetime.fromtimestamp(time_stamp)
  • datetime转时间戳 int(time.mktime(today.timetuple()))
  • datetime转字符串 today_str = today.strftime("%Y-%m-%d")
  • 字符串转datetime today = datetime.datetime.strptime(today_str, "%Y-%m-%d")
  • 补时差 today + datetime.timedelta(hours=8)
数据压缩

以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979
性能度量

有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。

例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多,timeit 证明了现代的方法更快一些。

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

相对于 timeit 的细粒度,:mod:profile 和 pstats 模块提供了针对更大代码块的时间度量工具。

测试模块

开发高质量软件的方法之一是为每一个函数开发测试代码,并且在开发过程中经常进行测试

doctest模块提供了一个工具,扫描模块并根据程序中内嵌的文档字符串执行测试。

测试构造如同简单的将它的输出结果剪切并粘贴到文档字符串中。

通过用户提供的例子,它强化了文档,允许 doctest 模块确认代码的结果是否与文档一致:

def average(values):
    """Computes the arithmetic mean of a list of numbers.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # 自动验证嵌入测试

unittest模块不像 doctest模块那么容易使用,不过它可以在一个独立的文件里提供一个更全面的测试集:

import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests

总览

文本

  1. string:通用字符串操作
  2. re:正则表达式操作
  3. difflib:差异计算工具
  4. textwrap:文本填充
  5. unicodedata:Unicode字符数据库
  6. stringprep:互联网字符串准备工具
  7. readline:GNU按行读取接口
  8. rlcompleter:GNU按行读取的实现函数

二进制数据

  1. struct:将字节解析为打包的二进制数据
  2. codecs:注册表与基类的编解码器

数据类型

  1. datetime:基于日期与时间工具
  2. calendar:通用月份函数
  3. collections:容器数据类型
  4. collections.abc:容器虚基类
  5. heapq:堆队列算法
  6. bisect:数组二分算法
  7. array:高效数值数组
  8. weakref:弱引用
  9. types:内置类型的动态创建与命名
  10. copy:浅拷贝与深拷贝
  11. pprint:格式化输出
  12. reprlib:交替repr()的实现

数学

  1. numbers:数值的虚基类
  2. math:数学函数
  3. cmath:复数的数学函数
  4. decimal:定点数与浮点数计算
  5. fractions:有理数
  6. random:生成伪随机数

函数式编程

  1. itertools:为高效循环生成迭代器
  2. functools:可调用对象上的高阶函数与操作
  3. operator:针对函数的标准操作

文件与目录

  1. os.path:通用路径名控制
  2. fileinput:从多输入流中遍历行
  3. stat:解释stat()的结果
  4. filecmp:文件与目录的比较函数
  5. tempfile:生成临时文件与目录
  6. glob:Unix风格路径名格式的扩展
  7. fnmatch:Unix风格路径名格式的比对
  8. linecache:文本行的随机存储
  9. shutil:高级文件操作
  10. macpath:Mac OS 9路径控制函数

持久化

  1. pickle:Python对象序列化
  2. copyreg:注册机对pickle的支持函数
  3. shelve:Python对象持久化
  4. marshal:内部Python对象序列化
  5. dbm:Unix“数据库”接口
  6. sqlite3:针对SQLite数据库的API 2.0

压缩

  1. zlib:兼容gzip的压缩
  2. gzip:对gzip文件的支持
  3. bz2:对bzip2压缩的支持
  4. lzma:使用LZMA算法的压缩
  5. zipfile:操作ZIP存档
  6. tarfile:读写tar存档文件

文件格式化

  1. csv:读写CSV文件
  2. configparser:配置文件解析器
  3. netrc:netrc文件处理器
  4. xdrlib:XDR数据编码与解码
  5. plistlib:生成和解析Mac OS X .plist文件

加密

  1. hashlib:安全散列与消息摘要
  2. hmac:针对消息认证的键散列

操作系统工具

  1. os:多方面的操作系统接口
  2. io:流核心工具
  3. time:时间的查询与转化
  4. argparser:命令行选项、参数和子命令的解析器
  5. optparser:命令行选项解析器
  6. getopt:C风格的命令行选项解析器
  7. logging:Python日志工具
  8. logging.config:日志配置
  9. logging.handlers:日志处理器
  10. getpass:简易密码输入
  11. curses:字符显示的终端处理
  12. curses.textpad:curses程序的文本输入域
  13. curses.ascii:ASCII字符集工具
  14. curses.panel:curses的控件栈扩展
  15. platform:访问底层平台认证数据
  16. errno:标准错误记号
  17. ctypes:Python外部函数库

并发

  1. threading:基于线程的并行
  2. multiprocessing:基于进程的并行
  3. concurrent:并发包
  4. concurrent.futures:启动并行任务
  5. subprocess:子进程管理
  6. sched:事件调度
  7. queue:同步队列
  8. select:等待I/O完成
  9. dummy_threading:threading模块的替代(当_thread不可用时)
  10. _thread:底层的线程API(threading基于其上)
  11. _dummy_thread:_thread模块的替代(当_thread不可用时)

进程间通信

  1. socket:底层网络接口
  2. ssl:socket对象的TLS/SSL填充器
  3. asyncore:异步套接字处理器
  4. asynchat:异步套接字命令/响应处理器
  5. signal:异步事务信号处理器
  6. mmap:内存映射文件支持

互联网

  1. email:邮件与MIME处理包
  2. json:JSON编码与解码
  3. mailcap:mailcap文件处理
  4. mailbox:多种格式控制邮箱
  5. mimetypes:文件名与MIME类型映射
  6. base64:RFC 3548:Base16、Base32、Base64编码
  7. binhex:binhex4文件编码与解码
  8. binascii:二进制码与ASCII码间的转化
  9. quopri:MIME quoted-printable数据的编码与解码
  10. uu:uuencode文件的编码与解码

HTML与XML

  1. html:HTML支持
  2. html.parser:简单HTML与XHTML解析器
  3. html.entities:HTML通用实体的定义
  4. xml:XML处理模块
  5. xml.etree.ElementTree:树形XML元素API
  6. xml.dom:XML DOM API
  7. xml.dom.minidom:XML DOM最小生成树
  8. xml.dom.pulldom:构建部分DOM树的支持
  9. xml.sax:SAX2解析的支持
  10. xml.sax.handler:SAX处理器基类
  11. xml.sax.saxutils:SAX工具
  12. xml.sax.xmlreader:SAX解析器接口
  13. xml.parsers.expat:运用Expat快速解析XML

互联网协议与支持

  1. webbrowser:简易Web浏览器控制器
  2. cgi:CGI支持
  3. cgitb:CGI脚本反向追踪管理器
  4. wsgiref:WSGI工具与引用实现
  5. urllib:URL处理模块
  6. urllib.request:打开URL连接的扩展库
  7. urllib.response:urllib模块的响应类
  8. urllib.parse:将URL解析成组件
  9. urllib.error:urllib.request引发的异常类
  10. urllib.robotparser:robots.txt的解析器
  11. http:HTTP模块
  12. http.client:HTTP协议客户端
  13. ftplib:FTP协议客户端
  14. poplib:POP协议客户端
  15. imaplib:IMAP4协议客户端
  16. nntplib:NNTP协议客户端
  17. smtplib:SMTP协议客户端
  18. smtpd:SMTP服务器
  19. telnetlib:Telnet客户端
  20. uuid:RFC4122的UUID对象
  21. socketserver:网络服务器框架
  22. http.server:HTTP服务器
  23. http.cookies:HTTPCookie状态管理器
  24. http.cookiejar:HTTP客户端的Cookie处理
  25. xmlrpc:XML-RPC服务器和客户端模块
  26. xmlrpc.client:XML-RPC客户端访问
  27. xmlrpc.server:XML-RPC服务器基础
  28. ipaddress:IPv4/IPv6控制库

多媒体

  1. audioop:处理原始音频数据
  2. aifc:读写AIFF和AIFC文件
  3. sunau:读写Sun AU文件
  4. wave:读写WAV文件
  5. chunk:读取IFF大文件
  6. colorsys:颜色系统间转化
  7. imghdr:指定图像类型
  8. sndhdr:指定声音文件类型
  9. ossaudiodev:访问兼容OSS的音频设备

国际化

  1. gettext:多语言的国际化服务
  2. locale:国际化服务

编程框架

  1. turtle:Turtle图形库
  2. cmd:基于行的命令解释器支持
  3. shlex:简单词典分析

Tk图形用户接口

  1. tkinter:Tcl/Tk接口
  2. tkinter.ttk:Tk主题控件
  3. tkinter.tix:Tk扩展控件
  4. tkinter.scrolledtext:滚轴文本控件

开发工具

  1. pydoc:文档生成器和在线帮助系统
  2. doctest:交互式Python示例
  3. unittest:单元测试框架
  4. unittest.mock:模拟对象库
  5. test:Python回归测试包
  6. test.support:Python测试工具套件
  7. venv:虚拟环境搭建

调试

  1. bdb:调试框架
  2. faulthandler:Python反向追踪库
  3. pdb:Python调试器
  4. timeit:小段代码执行时间测算
  5. trace:Python执行状态追踪

运行时

  1. sys:系统相关的参数与函数
  2. sysconfig:访问Python配置信息
  3. builtins:内置对象
  4. main:顶层脚本环境
  5. warnings:警告控制
  6. contextlib:with状态的上下文工具
  7. abc:虚基类
  8. atexit:出口处理器
  9. traceback:打印或读取一条栈的反向追踪
  10. future:未来状态定义
  11. gc:垃圾回收接口
  12. inspect:检查存活的对象
  13. site:址相关的配置钩子(hook)
  14. fpectl:浮点数异常控制
  15. distutils:生成和安装Python模块

解释器

  1. code:基类解释器
  2. codeop:编译Python代码

导入模块

  1. imp:访问import模块的内部
  2. zipimport:从ZIP归档中导入模块
  3. pkgutil:包扩展工具
  4. modulefinder:通过脚本查找模块
  5. runpy:定位并执行Python模块
  6. importlib:import的一种实施

Python语言

  1. parser:访问Python解析树
  2. ast:抽象句法树
  3. symtable:访问编译器符号表
  4. symbol:Python解析树中的常量
  5. token:Python解析树中的常量
  6. keyword:Python关键字测试
  7. tokenize:Python源文件分词
  8. tabnany:模糊缩进检测
  9. pyclbr:Python类浏览支持
  10. py_compile:编译Python源文件
  11. compileall:按字节编译Python库
  12. dis:Python字节码的反汇编器
  13. pickletools:序列化开发工具

其它

  1. formatter:通用格式化输出

Windows相关

  1. msilib:读写Windows Installer文件
  2. msvcrt:MS VC++ Runtime的有用程序
  3. winreg:Windows注册表访问
  4. winsound:Windows声音播放接口

Unix相关

  1. posix:最常用的POSIX调用
  2. pwd:密码数据库
  3. spwd:影子密码数据库
  4. grp:组数据库
  5. crypt:Unix密码验证
  6. termios:POSIX风格的tty控制
  7. tty:终端控制函数
  8. pty:伪终端工具
  9. fcntl:系统调用fcntl()和ioctl()
  10. pipes:shell管道接口
  11. resource:资源可用信息
  12. nis:Sun的NIS的接口
  13. syslog:Unix syslog程序库

发表评论

电子邮件地址不会被公开。 必填项已用*标注