Python 与数据实践 · 第 16 章

标准库巡礼

装好 Python 的那一刻,你手里其实已经攥着一只塞得满满的工具箱——标准库。字符串处理、文件读写、时间计算、目录遍历……这些几乎每个项目都要做的事,官方早就替你写好了。这一章带你把工具箱打开逛一圈:先分清"Pytho…

约 7 分钟2,688 字6 个代码示例

装好 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。合并规则:

  1. 结果文件的一级标题固定为 # 汇总文档
  2. 原文件里的所有标题整体降一级:# 变 ##,## 变 ###,以此类推;原本的六级标题 ###### 已降无可降,改成加粗正文
  3. 标题以外的内容(正文、列表、代码块等)原样搬运

下一章:17 · 依赖管理与第三方库