Python 标准库--python012
一、总体观:把标准库当成“系统 API”
标准库(Standard Library)是 Python 自带、开箱即用的“系统 API”,覆盖了从时间日期、数值计算、文件与进程、并发与网络、到配置解析、序列化与持久化、文本处理与类型系统等几乎所有通用编程需求。与第三方包相比,标准库的最大优势是稳定、跨平台、可长期维护;你可以优先用它把 70–80% 的通用需求解决,再在特定瓶颈处引入专业库做补强。
使用原则(五条)
“能用 stdlib 就先用 stdlib”:充分利用
pathlib
、shutil
、concurrent.futures
、asyncio
、logging
、argparse
等“现代接口”。首选“声明式/高层 API”:如
pathlib.Path
替代os.path.*
,concurrent.futures
替代直接管理threading
/multiprocessing
。关注“正确性语义”:如密码学随机数用
secrets
而非random
;金额计算用decimal
而非float
。拥抱“标准化数据格式”:
json
、csv
、sqlite3
、configparser
、tomllib
等,让配置与数据处理简单且可移植。顺应“现代 Python”:用
typing
、dataclasses
、functools
、itertools
、collections
等,让代码更可读、更易测、更快。
二、时间与日期:datetime
/ time
/ calendar
/ zoneinfo
1)datetime
:日期时间的“一站式”类型系统
基本类型:
date
、time
、datetime
、timedelta
、timezone
。典型用法:时区安全的时间戳换算、区间计算与格式化/解析:
用
datetime.now(tz=ZoneInfo("Asia/Shanghai"))
获取有时区的当前时间;用
isoformat()
与fromisoformat()
做无歧义的序列化;利用
timedelta
进行加减(如 T+N 天/小时)。
近年来的“姿势升级”
zoneinfo
(见下)加入后,避免对第三方pytz
依赖;datetime.fromisoformat()
解析 ISO 8601 更稳健;避免“天真时间”(naive datetime),在跨区场景始终绑定时区。
2)time
:与系统时钟打交道的工具集
time.time()
系统时间戳,适合记录事件时间;perf_counter()
/process_time()
:性能度量首选(高分辨率、单调时钟);sleep()
:实现简单的调度或退避;建议不要用
time.time()
度量性能(可能受系统时间修改影响)。
3)calendar
:日历辅助
生成某月日历、判断闰年、按周规则计算等;
在报表、批处理场景常配合
datetime
组织周期性数据。
4)zoneinfo
:标准库原生时区数据库(IANA)
适合一切需要正确时区规则(夏令时、历史切换)的业务。
搭配
datetime
使用:from zoneinfo import ZoneInfo from datetime import datetime dt = datetime.now(ZoneInfo("America/New_York")).isoformat()
迁移建议:pytz → zoneinfo;避免手写时区换算。
三、数学与数值:math
/ statistics
/ decimal
/ fractions
/ random
/ secrets
1)math
:C 级性能的基础数学
常量与函数:
pi
、e
、tau
、inf
、nan
、isfinite()
、isclose()
、fsum()
、factorial()
、comb()
、hypot()
、log*
、pow()
等。近年增强:
math.nextafter(x, y)
、ulp(x)
等更贴近数值分析的工具。性能实践:在标量数学上优先
math
;向量/矩阵运算再交给numpy
。
2)statistics
:轻量统计
mean
、median
、mode
、pstdev
/stdev
、quantiles
、fmean
等;适合报表/监控的“轻统计”;大规模数据仍建议
numpy
/pandas
。
3)decimal
与 fractions
:精度与有理数
金额/会计:优先
decimal.Decimal
(可配置精度与舍入);分数:
fractions.Fraction
适合精确比率(如配方、比例)。
4)random
vs secrets
:可复现 vs 安全
random
适合模拟、抽样、洗牌、可复现实验(可设seed
);secrets
用于安全学场景(令牌、邀请码、密码片段),例如secrets.token_urlsafe()
;规则:涉及安全/隐私/访问控制 → 必须用
secrets
。
四、文件与路径:pathlib
/ os
/ shutil
/ glob
/ fnmatch
/ tempfile
1)首选 pathlib.Path
的面向对象路径
Path
统一PosixPath
/WindowsPath
差异,常用操作如:/
运算符拼路径:Path("data") / "in" / "a.csv"
read_text()
/write_text()
、iterdir()
、glob()
、rename()
、unlink()
;
相比
os.path
,可读性强且避免字符串拼接陷阱。
2)os
:进程、环境变量、低层文件系统
os.environ
(读写环境变量)、os.makedirs()
、os.listdir()
、os.stat()
、os.symlink()
;进程与权限相关在跨平台上要注意行为差异。
3)shutil
:高级文件操作
拷贝/移动/归档:
copy2()
、move()
、rmtree()
、make_archive()
等;经常与
tempfile.TemporaryDirectory()
组合,写出原子化文件操作流程。
4)模式匹配与临时文件
glob
/Path.glob()
:通配符批量匹配;fnmatch
:对单个字符串做 shell 风格匹配;tempfile
:创建临时文件/目录,自动回收资源(防泄露、防冲突)。
五、系统与运行时:sys
/ argparse
/ logging
/ configparser
/ platform
/ importlib
1)sys
:解释器“仪表盘”
sys.version
、sys.platform
、sys.executable
、sys.path
;sys.stdin
/stdout
/stderr
与编码控制;异常钩子
sys.excepthook
、资源上限getrecursionlimit()
等。
2)argparse
:命令行接口(CLI)标准做法
定义参数、子命令、帮助信息与默认值;
搭配
logging
+configparser
/tomllib
实现三位一体的可配置 CLI。
3)logging
:结构化与分级日志
推荐统一入口
logging.getLogger(__name__)
,用basicConfig()
/dictConfig()
配置;级别:
DEBUG
/INFO
/WARNING
/ERROR
/CRITICAL
;产线建议:JSON 日志(
formatter
自定义)+ 按模块分 logger + 避免 print。
4)configparser
与 tomllib
INI 配置:
configparser
简单直观;TOML 原生支持:
tomllib
(Python 3.11+)读pyproject.toml
等现代配置;YAML/JSON:若配置较复杂、需注释或跨生态通用,可综合
json
或引入第三方PyYAML
。
5)platform
与 importlib
platform
:按系统/CPU/解释器差异做条件逻辑;importlib
:动态导入、资源访问(importlib.resources
统一包内数据文件读写)。
六、并发与异步:threading
/ multiprocessing
/ concurrent.futures
/ asyncio
1)高层首选 concurrent.futures
ThreadPoolExecutor
:I/O 密集任务(网络、磁盘);ProcessPoolExecutor
:CPU 密集任务(图像处理、数值计算);统一接口
submit()
/map()
/as_completed()
,降低心智负担。
2)threading
& multiprocessing
:在需要更细控制时
threading
:锁(Lock
/RLock
)、Event
、Condition
、Queue
;multiprocessing
:进程隔离、Manager
共享对象、Pipe
/Queue
进程间通信;注意 Windows 下的 spawn 行为(需
if __name__ == "__main__":
保护)。
3)asyncio
:单线程并发的“协程生态”
用
async
/await
写异步代码:大量并发 I/O(HTTP、数据库)效率极高;工具:
asyncio.run()
、TaskGroup
、gather()
、Semaphore
、Queue
、to_thread()
;模式建议:
纯 I/O 密集 →
asyncio
;轻量 I/O + 兼容同步库 →
ThreadPoolExecutor
;混合计算密集 →
ProcessPoolExecutor
或服务化/分布式。
七、数据格式与持久化:json
/ csv
/ sqlite3
/ pickle
/ dbm
1)json
:互操作首选
json.loads()
/dumps()
/load()
/dump()
;日期/小数等非原生类型:自定义
default=
与object_hook
;规则:跨语言/跨系统——优先 JSON。
2)csv
:轻量表格
DictReader
/DictWriter
操作友好;注意换行与编码(
newline=""
,并显式声明编码)。
3)sqlite3
:内嵌关系型数据库
单文件、零部署;适合原型、桌面工具、轻量后台;
搭配
row_factory
得到类字典行对象;事务/索引照常用,仍需注意并发访问模型(多写冲突)。
4)pickle
与 dbm
pickle
:Python 专用序列化(不安全,不要反序列化不可信数据);dbm
:简单键值存储;如今更多替代为sqlite3
或专门 K/V(如 Redis—第三方)。
八、文本处理与解析:re
/ textwrap
/ difflib
/ unicodedata
/ html
/ xml
1)re
:正则表达式
原子能力强,但要注意可读性与性能(回溯、贪婪/惰性等);
复杂解析可考虑分步法、有限状态机或专用解析器。
2)文本“整形”与比较
textwrap
:自动换行、缩进;difflib
:文本相似度、差异高亮(做对账/审阅时很好用);unicodedata
:标准化、类别检测;html
、xml.etree.ElementTree
:内置解析简单场景够用;复杂 HTML 仍建议第三方解析器。
九、网络与服务:urllib
/ http.server
/ ssl
/ smtplib
1)urllib
:最小 HTTP 客户端栈
urllib.request
发起 GET/POST、处理代理、超时与错误;对比第三方:
requests
语义更友好,但在零依赖场景urllib
仍是基线。
2)内置服务与安全
http.server
:临时文件服务/调试;ssl
:TLS 上下文、证书校验(生产中请严格配置证书与协议版本)。
十、函数式与容器“利器”:itertools
/ functools
/ operator
/ collections
/ heapq
/ bisect
/ array
1)itertools
:懒序列高效组合
chain
、cycle
、islice
、permutations
、combinations
、groupby
;常用于流水线式数据处理与生成器写法。
2)functools
与 operator
lru_cache
:记忆化加速纯函数;partial
:柯里化;singledispatch
/singledispatchmethod
:运行时基于类型的函数分发;operator
:更快的运算符函数(如itemgetter
/attrgetter
)。
3)collections
:高阶容器
deque
(双端队列)、Counter
(计数器)、defaultdict
、OrderedDict
(3.7+ dict 已保持插入序,但此类仍有语义价值)、namedtuple
、ChainMap
;collections.abc
:容器协议(可迭代、可映射、可序列等)是理解 Python 数据模型的钥匙。
4)堆、二分与数组
heapq
:小顶堆(Top-N、优先队列);bisect
:有序序列插入与查找;array
:定类型的紧凑数组(需要更轻内存时替代 list)。
十一、类型与数据类:typing
/ dataclasses
1)typing
:类型提示成为“开发协议”
常用:
List
/Dict
/Tuple
/Set
/Iterable
/Mapping
、Optional[T]
、Union
、Literal
、TypedDict
、Protocol
、Self
、TypeAlias
等;现代写法:使用内置泛型(如
list[int]
、dict[str, Any]
)替代typing.List[int]
(3.9+);设计建议:在模块 API、数据结构、跨团队接口上写明类型,配合
mypy
/pyright
静态检查,提高鲁棒性与可维护性。
2)dataclasses
:更轻的“值对象”
一行
@dataclass
自动生成__init__
/__repr__
/比较等;用
field(default_factory=...)
、slots=True
(节省内存)等参数;配合
typing
定义结构化配置、领域实体、DTO 十分顺手。
十二、包与模块:import
机制、包结构与资源
1)模块与包
模块是
.py
文件;包是含__init__.py
的目录(命名空间包可不含);约定式布局:按功能拆包,避免巨型模块;公共 API 在包级
__init__.py
做整合导出。
2)导入与资源管理
importlib
提供编程式导入;importlib.resources
统一读取包内资源文件(配置、模板、数据),避免手写相对路径与__file__
。
3)版本能力与兼容
需要兼容多 Python 版本时,可基于
sys.version_info
或typing.TYPE_CHECKING
做条件导入;对外库,尽量“本地封装一次,对全局统一暴露”。
十三、源码“窥探”与学习法:学会“看文档 + 读实现”
1)官方文档是“第一原理”
标准库 API 的行为、边界条件、异常语义都以官方文档为准。
养成“先读例子、再看参数、最后看边界”的习惯,避免“以为”。
2)读实现能解决“十万个为什么”
很多模块源码清晰易读(
itertools
的 Python 包装、functools
装饰器实现、collections
抽象基类等);读实现能理解复杂度/副作用/线程安全,指导我们的抽象设计和性能决策。
3)最小实验驱动
对“不确定的行为”,写 10–30 行小脚本做可重复的小实验(搭配
time.perf_counter()
、logging
、tempfile
、unittest
/pytest
);记录实验脚本与结论,沉淀为团队“最佳实践”。
十四、场景清单:从需求到选库(速查)
批量文件处理(跨平台):
pathlib
+shutil
+glob
+tempfile
配置化 CLI 工具:
argparse
+logging
+configparser
/tomllib
定时/计划任务:
datetime
+time.sleep()
(轻量)或交给系统调度(cron/Task Scheduler)高并发 I/O:
asyncio
(HTTP、DB、消息队列)或ThreadPoolExecutor
CPU 密集:
ProcessPoolExecutor
/multiprocessing
,或外部化(C 扩展、分布式)报表/统计:
statistics
+json/csv
+sqlite3
金额/小数:
decimal
安全令牌/随机口令:
secrets
文本差异与审阅:
difflib
拓扑排序/依赖求解:
graphlib.TopologicalSorter
(例如管线任务的有向无环图)包内静态资源:
importlib.resources
类型严谨的大型工程:
typing
+dataclasses
+ 静态检查器
十五、最佳实践与避坑指南(精炼版)
路径统一用
pathlib
;仅当调用旧接口或极低层 API 时再落回os.path
。日志代替
print
;分级别、分模块、可配置,产线输出尽量结构化(JSON)。严格区分
random
与secrets
;任何安全相关都不能用random
。性能度量用单调时钟(
perf_counter()
),不要用time.time()
。时区全链路绑定:
zoneinfo
+ 有 tz 的datetime
,序列化用 ISO 8601。数据持久化优先通用格式:
json/csv/sqlite3
,pickle
仅限可信边界内。并发模型选型先行:I/O 密集 →
asyncio
/ 线程池;CPU 密集 → 进程池/分布式。让类型成为文档:为公共 API 写
typing
注解,数据结构用dataclasses
。配置与代码解耦:
configparser
/tomllib
+ 环境变量,把密钥等放到外部注入。读源码学语义:遇到边界行为,优先翻实现与测试用例,胜过“猜”。
标准库不是“功能清单”,而是构建 Python 应用的地基与钢筋。当你以“系统 API”的视角来理解与选择模块,就会自然地写出更简洁、可维护、可迁移的代码。结合你课件第八章中对关键模块的入门引导,这份梳理进一步补足了近年来的现代化接口(如 pathlib
、concurrent.futures
、asyncio
、zoneinfo
、tomllib
、graphlib
、dataclasses
、typing
等),并通过场景化清单与最佳实践把“知道”转化为“能用、好用、用对”。后续如果你需要,我可以把以上内容进一步改造成讲义大纲(含练习与代码模板),或拆分为团队内部的标准库使用指南与代码片段库,方便直接复用到项目中。