Python标准库列表地址:
https://docs.python.org/zh-cn/3/library/index.html
Python library的使用方法: import sys
sys 系统相关的参数和函数
该模块提供了一些变量和函数。这些变量可能被解释器使用,也可能由解释器提供。这些函数会影响解释器。本模块总是可用的。
os 操作系统接口模块
该模块提供了一些方便使用操作系统相关功能的函数。 如果你是想读写一个文件,请参阅 open()
,如果你想操作路径,请参阅 os.path
模块,如果你想在命令行上读取所有文件中的所有行请参阅 fileinput
模块。 有关创建临时文件和目录的方法,请参阅 tempfile
模块,对于高级文件目录处理,请参阅 shutil
模块。
关于这些函数的可用性的说明:
所有 Python 内建的操作系统相关的模块的设计都是为了使得在同一功能可用的情况下,保持接口的一致性;例如,函数
os.stat(path)
以相同的格式返回关于 path 的统计信息(这个函数同时也是起源于 POSIX 接口)。针对特定的操作的拓展同样在可用于
os
模块,但是使用它们必然会对可移植性产生威胁。所有接受路径或文件名的函数都同时支持字节串和字符串对象,并在返回路径或文件名时使用相应类型的对象作为结果。
pathlib : 面向对象的文件系统路径
该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的 纯路径,以及从纯路径继承而来但提供 I/O 操作的 具体路径。
如果你以前从未使用过此模块或者不确定在项目中使用哪一个类是正确的,则
Path
总是你需要的。它在运行代码的平台上实例化为一个 具体路径。
在一些用例中纯路径很有用,例如:
如果你想要在 Unix 设备上操作 Windows 路径(或者相反)。你不应在 Unix 上实例化一个
WindowsPath
,但是你可以实例化PureWindowsPath
。你只想操作路径但不想实际访问操作系统。在这种情况下,实例化一个纯路径是有用的,因为它们没有任何访问操作系统的操作。
logging 日志库
这个模块为应用与库定义了实现灵活的事件日志系统的函数与类.
使用标准库提提供的 logging API 最主要的好处是,所有的 Python 模块都可能参与日志输出,> 包括你的日志消息和第三方模块的日志消息。
这个模块提供许多强大而灵活的功能。如果你对 logging 不太熟悉的话, 掌握它最好的方式就> 是 查看它对应的教程(详见右侧的链接)。
该模块定义的基础类和函数都列在下面。
记录器暴露了应用程序代码直接使用的接口。
处理程序将日志记录(由记录器创建)发送到适当的目标。
过滤器提供了更精细的设施,用于确定要输出的日志记录。
格式化程序指定最终输出中日志记录的样式。
time 时间的访问和转换
该模块提供了各种时间相关的函数。相关功能还可以参阅 datetime
和 calendar
模块。
尽管此模块始终可用,但并非所有平台上都提供所有功能。 此模块中定义的大多数函数调用都具有相同名称的平台C库函数。 因为这些函数的语义因平台而异,所以使用时最好查阅平台相关文档。
functools 高阶函数和可调用对象上的操作
functools
模块应用于高阶函数,即——参数或(和)返回值为其他函数的函数。通常来说,此模块的功能适用于所有可调用对象。
math 数学函数
该模块提供了对C标准定义的数学函数的访问。
这些函数不适用于复数;如果你需要计算复数,请使用 cmath
模块中的同名函数。将支持计算复数的函数区分开的目的,来自于大多数开发者并不愿意像数学家一样需要学习复数的概念。得到一个异常而不是一个复数结果使得开发者能够更早地监测到传递给这些函数的参数中包含复数,进而调查其产生的原因。
该模块提供了以下函数。除非另有明确说明,否则所有返回值均为浮点数。
Pickle Python 对象序列化
模块 pickle
实现了对一个 Python 对象结构的二进制序列化和反序列化。 "Pickling" 是将 Python 对象和所拥有的层次结构被转化为一个字节流的过程,而 "unpickling" 是相反的操作,会将(来自一个 binary file 或者 bytes-like object 的)字节流转化回一个对象层次结构。Pickling(和 unpickling)也被称为“序列化”, “编组” 1 或者 “平面化”。而为了避免混乱,此处采用术语 “pickling” 和 “unpickling”。
警告
pickle
模块在接受被错误地构造或者被恶意地构造的数据时不安全。永远不要 unpickle 来自于不受信任的或者未经验证的来源的数据。
IO 处理流的核心工具
io
模块提供了 Python 用于处理各种 I/O 类型的主要工具。三种主要的 I/O类型分别为: 文本 I/O, 二进制 I/O 和 原始 I/O。这些是泛型类型,有很多种后端存储可以用在他们上面。一个隶属于任何这些类型的具体对象被称作 file object。 其他同类的术语还有 流 和 类文件对象。
独立于其类别,每个具体流对象也将具有各种功能:它可以是只读,只写或读写。它还可以允许任意随机访问(向前或向后寻找任何位置),或仅允许顺序访问(例如在套接字或管道的情况下)。
platform 获取底层平台的标识数据
获取底层平台一些相关属性,如系统名称,版本等信息
argparse 命令行选项、参数和子命令解析器
argparse
模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse
将弄清如何从 sys.argv
解析出那些参数。 argparse
模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
re 正则表达式操作
这个模块提供了与 Perl 语言类似的正则表达式匹配操作。
模式和被搜索的字符串既可以是 Unicode 字符串 (str
) ,也可以是8位字节串 (bytes
)。 但是,Unicode 字符串与8位字节串不能混用:也就是说,你不能用一个字节串模式去匹配 Unicode 字符串,反之亦然;类似地,当进行替换操作时,替换字符串的类型也必须与所用的模式和搜索字符串的类型一致。
正则表达式使用反斜杠('\'
)来表示特殊形式,或者把特殊字符转义成普通字符。 而反斜杠在普通的 Python 字符串里也有相同的作用,所以就产生了冲突。比如说,要匹配一个字面上的反斜杠,正则表达式模式不得不写成 '\\\\'
,因为正则表达式里匹配一个反斜杠必须是 \\
,而每个反斜杠在普通的 Python 字符串里都要写成 \\
。
解决办法是对于正则表达式样式使用 Python 的原始字符串表示法;在带有 'r'
前缀的字符串字面值中,反斜杠不必做任何特殊处理。 因此 r"\n"
表示包含 '\'
和 'n'
两个字符的字符串,而 "\n"
则表示只包含一个换行符的字符串。 样式在 Python 代码中通常都会使用这种原始字符串表示法来表示。
绝大部分正则表达式操作都提供为模块函数和方法,在 编译正则表达式. 这些函数是一个捷径,不需要先编译一个正则对象,但是损失了一些优化参数。
参见
第三方模块 regex , 提供了与标准库
re
模块兼容的API接口, 同时还提供了额外的功能和更全面的Unicode支持。
datetime 基础 日期 和 时间 数据类型
datetime
模块提供了可以通过多种方式操作日期和时间的类。在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。相关功能可以参阅 time
和 calendar
模块。
有两种日期和时间的对象:天真型和觉悟型。
觉悟型对象有着用足以支持一些应用层面算法和国家层面时间调整的信息,例如时区和夏令时,来让自己和其他的觉悟型对象区别开来。觉悟型对象是用来表达不对解释器开放的特定时间信息 1。
天真型对象没包含足够多的信息来明确定位与之相关的 "date"对象和"time"对象。天真型对象代表的是 世界标准时间(UTC), 当地时间或者是其它时区的时间完全取决于程序就像一个数字是代表的是米、英里或者质量完全取决于程序。天真型对象以忽略了一些现实情况的为代价使得它容易理解和使用。
对于需要觉悟型对象的应用, datetime
对象和 time
对象有一个可选的时区信息属性 tzinfo
,这个属性可以设置给 tzinfo
类的子类实例。这些 tzinfo
对象捕获关于相对于世界标准时间(UTC)偏移、时区名字和夏令时是否有效等信息。需要注意的是,只有一个具体的 tzinfo
类,即由 datetime
模块提供的 timezone
类。 timezone
类可以代表相对于世界标准时间(UTC)固定偏移的简单时区,比如世界标准时间(UTC)自己或者北美东部时间或者东部夏令时。支持时区的详细程度取决于应用。世界各地的时间调整规则相比理性更加政治性,经常会变更。也没有一个基于世界标准时间(UTC)的标准套件适合用于所有应用。
random --- 生成伪随机数
该模块实现了各种分布的伪随机数生成器。
对于整数,从范围中有统一的选择。 对于序列,存在随机元素的统一选择、用于生成列表的随机排列的函数、以及用于随机抽样而无需替换的函数。
在实数轴上,有计算均匀、正态(高斯)、对数正态、负指数、伽马和贝塔分布的函数。 为了生成角度分布,可以使用 von Mises 分布。
几乎所有模块函数都依赖于基本函数 random()
,它在半开放区间 [0.0,1.0) 内均匀生成随机浮点数。 Python 使用 Mersenne Twister 作为核心生成器。 它产生 53 位精度浮点数,周期为 2**19937-1 ,其在 C 中的底层实现既快又线程安全。 Mersenne Twister 是现存最广泛测试的随机数发生器之一。 但是,因为完全确定性,它不适用于所有目的,并且完全不适合加密目的。
这个模块提供的函数实际上是 random.Random
类的隐藏实例的绑定方法。 你可以实例化自己的 Random
类实例以获取不共享状态的生成器。
如果你想使用自己设计的不同基础生成器,类 Random
也可以作为子类:在这种情况下,重载 random()
、 seed()
、 getstate()
以及 setstate()
方法。可选地,新生成器可以提供 getrandbits()
方法——这允许 randrange()
在任意大的范围内产生选择。
random
模块还提供 SystemRandom
类,它使用系统函数 os.urandom()
从操作系统提供的源生成随机数。
decimal --- 十进制定点和浮点运算
decimal
模块为快速正确舍入的十进制浮点运算提供支持。 它提供了 float
数据类型以外的几个优点:
Decimal “基于一个浮点模型,它是为人们设计的,并且必然具有最重要的指导原则 —— 计算机必须提供与人们在学校学习的算法相同的算法。” —— 摘自十进制算术规范。
十进制数字可以准确表示。 相比之下,数字如
1.1
和2.2
在二进制浮点中没有精确的表示。 最终用户通常不希望1.1 + 2.2
显示为3.3000000000000003
,就像二进制浮点一样。精确性延续到算术中。 在十进制浮点数中,
0.1 + 0.1 + 0.1 - 0.3
恰好等于零。 在二进制浮点数中,结果为5.5511151231257827e-017
。 虽然接近于零,但差异妨碍了可靠的相等性检验,并且差异可能会累积。 因此,在具有严格相等不变量的会计应用程序中, decimal 是首选。十进制模块包含一个重要位置的概念,因此
1.30 + 1.20
是2.50
。 保留尾随零以表示重要性。 这是货币申请的惯常陈述。 对于乘法,“教科书”方法使用被乘数中的所有数字。 例如,1.3 * 1.2
给出1.56
而1.30 *1.20
给出1.5600
。与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为28个位置),可以与给定问题所需的一样大:
<pre class="notranslate" style="overflow-x: auto; overflow-y: hidden; padding: 5px; background-color: rgb(238, 255, 204); color: rgb(51, 51, 51); line-height: 18.528px; border: 1px solid rgb(170, 204, 153); font-family: monospace, sans-serif; font-size: 15.44px; border-radius: 3px;">>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')
>>> getcontext().prec = 28
>>> Decimal(1) / Decimal(7)
Decimal('0.1428571428571428571428571429')
</pre>
二进制和十进制浮点都是根据已发布的标准实现的。 虽然内置浮点类型只公开其功能的一小部分,但十进制模块公开了标准的所有必需部分。 在需要时,程序员可以完全控制舍入和信号处理。 这包括通过使用异常来阻止任何不精确操作来强制执行精确算术的选项。
十进制模块旨在支持“无偏见,精确的非连续十进制算术(有时称为定点算术)和舍入浮点算术”。 —— 摘自十进制算术规范。
模块设计以三个概念为中心:十进制数,算术上下文和信号。
十进制数是不可变的。 它有一个符号,系数数字和一个指数。 为了保持重要性,系数数字不会截断尾随零。十进制数也包括特殊值,例如 Infinity
,-Infinity
,和 NaN
。 该标准还区分 -0
和 +0
。
算术的上下文是指定精度、舍入规则、指数限制、指示操作结果的标志以及确定符号是否被视为异常的陷阱启用器的环境。 舍入选项包括 ROUND_CEILING
、 ROUND_DOWN
、 ROUND_FLOOR
、 ROUND_HALF_DOWN
, ROUND_HALF_EVEN
、 ROUND_HALF_UP
、 ROUND_UP
以及 ROUND_05UP
.
信号是在计算过程中出现的异常条件组。 根据应用程序的需要,信号可能会被忽略,被视为信息,或被视为异常。 十进制模块中的信号有:Clamped
、 InvalidOperation
、 DivisionByZero
、 Inexact
、 Rounded
、 Subnormal
、 Overflow
、 Underflow
以及 FloatOperation
。
对于每个信号,都有一个标志和一个陷阱启动器。 遇到信号时,其标志设置为 1 ,然后,如果陷阱启用器设置为 1 ,则引发异常。 标志是粘性的,因此用户需要在监控计算之前重置它们。
threading --- 基于线程的并行
这个模块在较低级的模块 _thread
基础上建立较高级的线程接口。参见: queue
模块。
在 3.7 版更改: 这个模块曾经为可选项,但现在总是可用。
json --- JSON 编码和解码器
JSON (JavaScript Object Notation),由 RFC 7159 (which obsoletes RFC 4627) 和 ECMA-404 指定,是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式,尽管它不仅仅是一个严格意义上的 JavaScript 的字集 1。
json
提供了与标准库 marshal
和 pickle
相似的API接口。
base64 --- Base16, Base32, Base64, Base85 数据编码
此模块提供了将二进制数据编码为可打印的 ASCII 字符以及将这些编码解码回二进制数据的函数。它为 RFC 3548 指定的 Base16, Base32 和 Base64 编码以及已被广泛接受的 Ascii85 和 Base85 编码提供了编码和解码函数。
RFC 3548 编码的目的是使得二进制数据可以作为电子邮件的内容正确地发送,用作 URL 的一部分,或者作为 HTTP POST 请求的一部分。其中的编码算法和 uuencode 程序是不同的。
此模块提供了两个接口。新的接口提供了从 类字节对象 到 ASCII 字节 bytes
的编码,以及将 ASCII 的 类字节对象 或字符串解码到 bytes
的操作。此模块支持定义在 RFC 3548 中的所有 base-64 字母表 (普通的、URL 安全的和文件系统安全的)。
旧的接口不提供从字符串的解码操作,但提供了操作 文件对象 的编码和解码函数。旧接口只支持标准的 Base64 字母表,并且按照 RFC 2045 的规范每 76 个字符增加一个换行符。注意:如果你需要支持 RFC 2045,那么使用 email
模块可能更加合适。
在 3.3 版更改: 新的接口提供的解码函数现在已经支持只包含 ASCII 的 Unicode 字符串。
在 3.4 版更改: 所有 类字节对象 现在已经被所有编码和解码函数接受。添加了对 Ascii85/Base85 的支持。
abc --- 抽象基类
该模块提供了在 Python 中定义 抽象基类 (ABC) 的组件,在 PEP 3119 中已有概述。查看 PEP 文档了解为什么需要在 Python 中增加这个模块。(也可查看 PEP 3141 以及 numbers
模块了解基于 ABC 的数字类型继承关系。)
collections
模块中有一些派生自 ABC 的具体类;当然这些类还可以进一步被派生。此外,collections.abc
子模块中有一些 ABC 可被用于测试一个类或实例是否提供特定的接口,例如它是否可哈希或它是否为映射等。
该模块提供了一个元类 ABCMeta
,可以用来定义抽象类,另外还提供一个工具类 ABC
,可以用它以继承的方式定义抽象基类。
html.parser --- 简单的 HTML 和 XHTML 解析器
这个模块定义了一个 HTMLParser
类,为 HTML(超文本标记语言)和 XHTML 文本文件解析提供基础。
http --- HTTP 模块
http
是一个包,它收集了多个用于处理超文本传输协议的模块:
http.client
是一个低层级的 HTTP 协议客户端;对于高层级的 URL 访问请使用urllib.request
http.server
包含基于socketserver
的基本 HTTP 服务类http.cookies
包含一些有用来实现通过 cookies 进行状态管理的工具http.cookiejar
提供了 cookies 的持久化
urllib --- URL 处理模块
urllib
是一个收集了多个用到 URL 的模块的包:
urllib.request
打开和读取 URLurllib.error
包含urllib.request
抛出的异常urllib.parse
用于解析 URLurllib.robotparser
用于解析robots.txt
文件
webbrowser --- 方便的Web浏览器控制器
webbrowser
模块提供了一个高级接口,允许向用户显示基于Web的文档。 在大多数情况下,只需从该模块调用 open()
函数就可以了。
在 Unix 下,图形浏览器在 X11 下是首选,但如果图形浏览器不可用或 X11 显示不可用,则将使用文本模式浏览器。 如果使用文本模式浏览器,则调用进程将阻塞,直到用户退出浏览器。
如果存在环境变量 BROWSER
,则将其解释为 os.pathsep
分隔的浏览器列表,以便在平台默认值之前尝试。 当列表部分的值包含字符串 %s
时,它被解释为一个文字浏览器命令行,用于替换 %s
的参数 URL ;如果该部分不包含 %s
,则它只被解释为要启动的浏览器的名称。 1
对于非 Unix 平台,或者当 Unix 上有远程浏览器时,控制过程不会等待用户完成浏览器,而是允许远程浏览器在显示界面上维护自己的窗口。 如果 Unix 上没有远程浏览器,控制进程将启动一个新的浏览器并等待。
脚本 webbrowser 可以用作模块的命令行界面。它接受一个 URL 作为参数。还接受以下可选参数:-n
如果可能,在新的浏览器窗口中打开 URL ; -t
在新的浏览器页面(“标签”)中打开 URL。这些选择当然是相互排斥的。用法示例:
python -m webbrowser -t "http://www.python.org"
builtins --- 内建对象
该模块提供对Python的所有“内置”标识符的直接访问;例如,builtins.open
是内置函数的全名 open()
。请参阅 内置函数 和 内置常量 的文档。
大多数应用程序通常不会显式访问此模块,但在提供与内置值同名的对象的模块中可能很有用,但其中还需要内置该名称。