Python 3 教程第30篇(标准库概览)

Python3 标准库概览

Python 标准库非常庞大,所提供的组件涉及范围十分广泛,使用标准库我们可以让您轻松地完成各种任务。

以下是一些 Python3 标准库中的模块:

  • os 模块:os 模块提供了许多与操作系统交互的函数,例如创建、移动和删除文件和目录,以及访问环境变量等。
  • sys 模块:sys 模块提供了与 Python 解释器和系统相关的功能,例如解释器的版本和路径,以及与 stdin、stdout 和
    stderr 相关的信息。
  • time 模块:time 模块提供了处理时间的函数,例如获取当前时间、格式化日期和时间、计时等。
  • datetime 模块:datetime 模块提供了更高级的日期和时间处理函数,例如处理时区、计算时间差、计算日期差等。
  • random 模块:random 模块提供了生成随机数的函数,例如生成随机整数、浮点数、序列等。
  • math 模块:math 模块提供了数学函数,例如三角函数、对数函数、指数函数、常数等。
  • re 模块:re 模块提供了正则表达式处理函数,可以用于文本搜索、替换、分割等。
  • json 模块:json 模块提供了 JSON 编码和解码函数,可以将 Python 对象转换为 JSON 格式,并从 JSON
    格式中解析出 Python 对象。
  • urllib 模块:urllib 模块提供了访问网页和处理 URL 的功能,包括下载文件、发送 POST 请求、处理 cookies 等。

操作系统接口

os 模块提供了不少与操作系统相关联的函数,例如文件和目录的操作。

实例

import os

# 获取当前工作目录
current_dir = os.getcwd()
print("当前工作目录:", current_dir)

# 列出目录下的文件
files = os.listdir(current_dir)
print("目录下的文件:", files)

建议使用 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()

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


日期和时间

datetime 模块为日期和时间处理同时提供了简单和复杂的方法。
支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。

实例
i

mport datetime
#获取当前日期和时间
current_datetime = datetime.datetime.now()
print(current_datetime)

# 获取当前日期
current_date = datetime.date.today()
print(current_date)

# 格式化日期
formatted_datetime = current_datetime.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime)  # 输出:2023-07-17 15:30:45

输出结果为:

2023-07-17 18:37:56.036914
2023-07-17
2023-07-17 18:37:56

该模块还支持时区处理:

>>> # 导入了 datetime 模块中的 date 类
>>> from datetime import date
>>> now = date.today()    # 当前日期
>>> now
datetime.date(2023, 7, 17)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'07-17-23. 17 Jul 2023 is a Monday on the 17 day of July.'

>>> # 创建了一个表示生日的日期对象
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday   # 计算两个日期之间的时间差
>>> age.days             # 变量age的days属性,表示时间差的天数
21535

数据压缩

以下模块直接支持通用的数据打包和压缩格式: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
<think>我们被要求提供Python所有标准库的信息。需要注意的是,Python标准库非常庞大,不可能在这里完整列出所有模块(因为不同版本可能有差异,且总数超过300个)。因此,我们将提供一个概览,包括主要的分类和每个类别下的重要模块,并附上官方文档链接以供进一步参考。 根据用户提供的引用[1]和[2],我们知道标准库Python安装时自带的,不需要单独安装,并且覆盖了广泛的应用领域。 以下是对Python标准库的总结(基于Python 3.10,但大部分模块在较新版本中也是类似的): ### Python标准库主要分类及重要模块 #### 1. 内置函数和内置类型 - `builtins`模块(无需导入即可使用):包含如`print()`, `len()`, `open()`, `range()`, `list`, `dict`等。 #### 2. 文件与目录操作 - `os`: 操作系统接口(文件、目录、进程等)[^1]。 - `os.path`: 路径操作[^1]。 - `shutil`: 高级文件操作(复制、移动、删除等)[^1]。 - `glob`: 文件名模式匹配[^1]。 - `pathlib`: 面向对象的文件系统路径(Python3.4+)[^1]。 #### 3. 系统与进程管理 - `sys`: 系统相关的参数和函数[^1]。 - `subprocess`: 生成子进程,控制其输入输出流[^1]。 - `argparse`: 命令行参数解析[^1]。 - `logging`: 日志记录[^1]。 #### 4. 数据持久化与序列化 - `pickle`: Python对象序列化[^1]。 - `sqlite3`: SQLite数据库操作[^1]。 - `json`: JSON格式编码与解码[^1]。 #### 5. 数据压缩与归档 - `gzip`, `bz2`, `lzma`: 处理压缩文件[^1]。 - `zipfile`: 读写ZIP归档文件[^1]。 - `tarfile`: 读写TAR归档文件[^1]。 #### 6. 时间与日期 - `time`: 时间访问和转换[^1]。 - `datetime`: 日期和时间处理[^1]。 - `calendar`: 日历相关函数[^1]。 #### 7. 数学与数值计算 - `math`: 数学函数(三角函数、指数、对数等)[^1]。 - `cmath`: 复数数学函数[^1]。 - `random`: 生成伪随机数[^1]。 - `statistics`: 数学统计函数[^1]。 - `decimal`: 十进制浮点运算[^1]。 - `fractions`: 分数运算[^1]。 #### 8. 网络通信 - `socket`: 底层网络接口[^1]。 - `email`: 电子邮件处理[^1]。 - `smtplib`: SMTP协议客户端[^1]。 - `http`: HTTP模块(客户端和服务器)[^1]。 - `urllib`: URL处理模块[^1]。 - `ftplib`, `poplib`, `imaplib`: 其他协议客户端[^1]。 #### 9. 并发与并行 - `threading`: 线程并行[^1]。 - `multiprocessing`: 进程并行[^1]。 - `concurrent.futures`: 异步执行的高级接口[^1]。 - `asyncio`: 异步I/O框架(Python3.4+)[^1]。 #### 10. 数据格式化与字符串处理 - `re`: 正则表达式[^1]。 - `string`: 字符串操作[^1]。 - `textwrap`: 文本自动换行[^1]。 - `unicodedata`: Unicode数据库[^1]。 #### 11. 开发工具与调试 - `pdb`: Python调试器[^1]。 - `doctest`: 通过文档字符串执行测试[^1]。 - `unittest`: 单元测试框架[^1]。 - `timeit`: 测量小段代码的执行时间[^1]。 - `profile`, `cProfile`: 性能分析[^1]。 #### 12. 其他重要模块 - `collections`: 容器数据类型(如`namedtuple`, `deque`, `Counter`等)[^1]。 - `itertools`: 迭代器工具[^1]。 - `functools`: 高阶函数和可调用对象操作[^1]。 - `typing`: 类型提示支持(Python3.5+)[^1]。 - `io`: 流处理工具[^1]。 - `csv`: CSV文件读写[^1]。 - `configparser`: 配置文件解析[^1]。 - `tkinter`: 标准GUI库(Tk接口)[^1]。 ### 官方文档与资源 Python标准库的完整列表和详细文档可参考官方文档: - [Python 3.10标准库索引](https://docs.python.org/zh-cn/3.10/library/index.html) 由于标准库模块数量庞大,建议根据需求查阅相关模块的具体用法。另外,Python还有庞大的第三方库生态系统(如PyPI),可以解决更多特定领域的问题[^1][^2]。 ### 相关问题 1. Python标准库中用于处理日期和时间的主要模块有哪些? 2. 如何使用Python标准库进行文件压缩和解压缩? 3. Python标准库中的`collections`模块提供了哪些有用的数据结构? 4. 如何利用Python标准库进行单元测试? 如果您需要某个模块的详细说明或示例代码,请提供具体模块名称。 </think>### Python标准库概述 Python标准库(Standard Library)是Python语言的核心组件,包含大量内置模块和工具,覆盖文件操作、网络通信、数据处理等场景。这些模块无需单独安装,随Python解释器一同部署[^1][^2]。以下按功能分类列出主要标准库模块: #### 一、基础模块与工具 1. **内置函数与类型** - `builtins`:包含基础函数(如`print()`、`len()`)和内置类型(列表、字典等)[^2]。 - `math`:数学运算(三角函数、对数等),例如: $$ \cos(\pi) = -1 $$ - `random`:随机数生成[^2]。 2. **系统接口** - `os`:操作系统交互(文件/目录操作)[^1]。 - `sys`:访问解释器参数(如命令行参数`sys.argv`)[^1]。 - `subprocess`:管理子进程[^2]。 #### 二、数据处理与持久化 | 模块 | 功能 | |--------------|--------------------------| | `json` | JSON编码/解码 | | `pickle` | 对象序列化 | | `sqlite3` | SQLite数据库操作 | | `csv` | CSV文件读写 | #### 三、网络与通信 - `socket`:底层网络通信[^2]。 - `http`:HTTP协议客户端/服务端(如`http.server`)。 - `urllib`:URL处理(请求、解析)。 #### 四、并发与异步 - `threading`:多线程支持。 - `multiprocessing`:多进程处理。 - `asyncio`:异步I/O框架(Python 3.4+)[^2]。 #### 五、开发工具 - `unittest`:单元测试框架。 - `pdb`:调试器。 - `logging`:日志记录[^1]。 > **完整列表参考**: > 官方标准库文档:[Python 3.10 Library Index](https://docs.python.org/3.10/library/index.html)(包含全部模块说明)[^1]。 ### 关键特性 1. **开箱即用**:无需`pip install`,直接`import`导入[^1]。 2. **跨平台**:兼容Windows/Linux/macOS。 3. **功能全面**:从系统调用(`os`)到高阶算法(`itertools`)全覆盖[^2]。 ### 相关问题 1. 如何查看当前Python环境支持的所有标准库模块? 2. 标准库中的`collections`模块提供了哪些增强型数据结构? 3. 使用`os`模块进行文件路径操作有哪些最佳实践? 4. 为什么`asyncio`被广泛用于高性能网络编程? 如果需要具体模块的示例代码或实现原理,请提供模块名称进一步探索!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值