标准库巡礼
装好 Python 的那一刻,你手里其实已经攥着一只塞得满满的工具箱——标准库。字符串处理、文件读写、时间计算、目录遍历……这些几乎每个项目都要做的事,官方早就替你写好了。这一章带你把工具箱打开逛一圈:先分清"Pytho…
装好 Python 的那一刻,你手里其实已经攥着一只塞得满满的工具箱——标准库。字符串处理、文件读写、时间计算、目录遍历……这些几乎每个项目都要做的事,官方早就替你写好了。这一章带你把工具箱打开逛一圈:先分清"Python 自带"的三层含义,学会查官方手册,再混个脸熟认识一批出场率最高的模块。标准库的正确打开方式从来不是背诵——先用起来,忘了再查。
1. "Python 自带"的三层含义
平时说"这是 Python 自带的",细究起来可能指三种不同的东西:
| 层 | 例子 | 特点 |
|---|---|---|
| 内置 API | print、len、sum、sorted |
连 import 都不用,拿起来就用 |
| 内置模块 | sys、builtins、_thread |
直接编译在解释器里,import 即可用 |
| 标准库模块 | json、re、pathlib、collections |
随解释器一起安装,以 .py 文件躺在磁盘上 |
哪些算内置模块?解释器自己交了底:
import sys
print(sys.builtin_module_names) # 这份名单里的都是 C 层实现的内置模块
三层的共同点:不用安装、不用联网、装完 Python 就有——这也是它们与下一章第三方库的本质区别。
2. 官方手册:最权威的字典
标准库太大,没人需要通读,但你必须知道字典放在哪。官方中文手册有两个入口,按场景选用:
- 按功能浏览(适合不知道该用什么时):https://docs.python.org/zh-cn/3/library/index.html
- 按名称检索(已经知道模块名时):https://docs.python.org/zh-cn/3/py-modindex.html
手册里每个模块都带示例和注意事项,是查证的第一手资料。配合 AI 使用效果更好:让 AI 推荐模块、解释用法之后,回手册核对一遍——这一步能帮你挡掉几乎所有"AI 编造 API"的坑。
3. 高频模块速览
下面这份名单按出场率挑选,目标是混个脸熟,用到再深究。
3.1 路径与文件系统
| 模块 | 一句话定位 |
|---|---|
pathlib |
面向对象的路径操作,现代项目首选 |
os / os.path |
与操作系统打交道的老牌工具箱 |
shutil |
复制、移动、删除整个目录树 |
glob |
用通配符批量匹配文件 |
from pathlib import Path
note = Path("./notes") / "day1.txt" # 拼路径不用操心斜杠方向
print(note.exists(), note.suffix) # 是否存在、后缀名是什么
print(note.parent.name) # 上级目录叫什么
3.2 文件与数据格式
| 模块 | 一句话定位 |
|---|---|
open(内置函数) |
读写文本/二进制文件的入口 |
json |
JSON 字符串与 Python 对象互转 |
csv |
逐行读写表格数据 |
import json
text = json.dumps({"city": "杭州", "days": 3}, ensure_ascii=False)
print(text) # {"city": "杭州", "days": 3}
3.3 日期与时间
| 模块 | 一句话定位 |
|---|---|
time |
时间戳、睡眠、计时 |
datetime |
日期对象的运算与格式化 |
from datetime import date
deadline = date(2026, 9, 30)
left = deadline - date.today() # 日期相减直接得到 timedelta
print(f"距离截止还剩 {left.days} 天")
3.4 容器与迭代增强
| 模块 | 一句话定位 |
|---|---|
collections |
Counter 计数、defaultdict 免判空、deque 双端队列 |
itertools |
迭代器的排列组合积木 |
from collections import Counter
votes = ["python", "go", "python", "rust", "python"]
print(Counter(votes).most_common(2)) # [('python', 3), ('go', 1)]
3.5 其他常客
re(正则)、math / random(数学与随机)、string(字符常量)、functools(函数工具)、sys(与解释器交互)、subprocess(调用外部命令)、logging(日志)、argparse(命令行参数)、typing(类型标注,第 14 章的老朋友)。
本章两道习题会用到的:os、pathlib、re、文件读写——正好覆盖出场率最高的那几样。
4. 作业
老规矩:先自己动手,卡住了再让 AI 给思路;AI 给的任何方案都要亲手验证。
习题一:目录树渲染
实现函数 draw_tree(folder: str, include_hidden: bool = False):
folder:目标目录,绝对路径、相对路径都可以(相对路径以当前工作目录为基准)include_hidden:是否显示隐藏条目;隐藏的判定从简——名字以.开头就算隐藏
功能:用递归把目录下的所有内容画成一棵树,效果对标 Linux 的 tree 命令。输出格式如下:
assets
├── logo.png
├── raw
│ ├── a.csv
│ └── b.csv
└── 说明.txt
习题二:讲义合并
实现函数 merge_docs(sources: list[str], target: str) -> None:
sources:一组 Markdown 文件的路径target:合并结果要写入的文件路径
功能:把这些 Markdown 文件合并成一份,保存到 target。合并规则:
- 结果文件的一级标题固定为
# 汇总文档 - 原文件里的所有标题整体降一级:
#变##,##变###,以此类推;原本的六级标题######已降无可降,改成加粗正文 - 标题以外的内容(正文、列表、代码块等)原样搬运
下一章:17 · 依赖管理与第三方库