Python常用内建模块与标准库实战:datetime、collections、pathlib、json 与 re
学到前面这里,你已经掌握了 Python 的基础语法、函数、模块、面向对象,以及错误处理、调试与测试。
接下来,一个非常现实的问题就出现了:
真正写 Python 程序时,除了语法本身,我们最常用的到底是什么?
答案往往不是“再学一种新语法”,而是:学会使用标准库。
Python 之所以常被称为“自带电池(batteries included)”的语言,一个重要原因就是它的标准库非常丰富。很多常见问题,其实都不需要额外安装第三方包,直接用标准库就能解决,例如:
- 处理日期和时间;
- 统计数据出现次数;
- 管理文件路径;
- 读写 JSON 数据;
- 处理正则表达式;
- 获取命令行参数;
- 生成哈希值;
- 进行高效迭代。
这篇文章不会试图“把标准库全讲一遍”,因为那样既不现实,也没有学习重点。
本文会围绕实际开发中最常见的一批模块,带你建立一个清晰的整体认识:
datetime:处理日期与时间;collections:更强大的容器类型;pathlib:更现代的路径与文件操作;os与sys:与操作系统和解释器交互;json:数据序列化与反序列化;re:正则表达式;hashlib:哈希摘要;itertools:高效迭代工具。
理解这一章之后,你会明显感觉到:
- 自己能写的程序一下子变多了;
- 遇到常见需求时,不再第一反应就是“去装包”;
- 也更容易读懂别人代码里那些常见模块的用法。
一、为什么标准库这么重要?
很多初学者学 Python 时,容易把注意力全部放在:
- 变量怎么写;
- 循环怎么写;
- 函数怎么定义;
- 类怎么写。
这些当然重要,但只掌握语法,还不足以应对真实开发。
比如下面这些需求:
- 计算两个日期差了多少天;
- 找出一段文本里所有邮箱;
- 统计列表里哪个单词出现最多;
- 遍历某个目录下所有
.py文件; - 把 Python 字典保存成 JSON;
- 对密码做摘要;
- 对一个大数据流做惰性处理。
这些问题本身并不复杂,但如果完全靠自己从零写,成本会很高。
标准库的价值就在这里:
它把大量常见问题的“通用解法”预先准备好了。
所以学习标准库,本质上不是在背 API,而是在积累“遇到某类问题时,我应该想到哪个工具”。
二、datetime:处理日期与时间
2.1 为什么不要自己拼时间字符串?
初学者最常见的做法之一,是直接把时间当字符串处理:
1 | now = '2026-04-24 18:30:00' |
这种写法在“展示”时可以,但一旦涉及:
- 加减时间;
- 比较先后;
- 提取年、月、日;
- 转换格式;
字符串就会变得非常不方便。
这时就应该用 datetime 模块。
2.2 获取当前日期和时间
1 | from datetime import datetime, date |
这里:
datetime.now()返回当前日期时间;date.today()返回当前日期。
2.3 构造指定时间
1 | from datetime import datetime |
这比字符串更适合后续计算。
2.4 格式化输出:strftime()
1 | from datetime import datetime |
常见格式符包括:
%Y:四位年份;%m:月份;%d:日期;%H:小时;%M:分钟;%S:秒。
2.5 字符串转时间:strptime()
1 | from datetime import datetime |
这是实际开发中非常常见的能力,例如:
- 读取日志时间;
- 解析接口返回值;
- 处理用户输入时间。
2.6 时间计算:timedelta
1 | from datetime import datetime, timedelta |
这比手工算日期安全得多,也更容易读。
2.7 datetime 的使用建议
以后只要你遇到下面这些需求,就应该优先想到它:
- 日期比较;
- 时间差计算;
- 时间格式转换;
- 日志时间处理;
- 定时任务时间表示。
可以说,它是最常用的标准库之一。
三、collections:比普通容器更顺手的工具
collections 模块提供了一组“增强版容器类型”,很适合解决一些列表、字典虽然也能做,但写起来不够优雅的问题。
3.1 Counter:统计次数
如果你想统计一个序列中每个元素出现了多少次,Counter 非常方便。
1 | from collections import Counter |
它特别适合:
- 词频统计;
- 投票结果统计;
- 日志关键字频次分析。
3.2 defaultdict:自动提供默认值
普通字典在访问不存在的键时会报错:
1 | d = {} |
而 defaultdict 可以为你自动提供默认值:
1 | from collections import defaultdict |
这里 int 会作为默认工厂,因此不存在的键默认值是 0。
也可以这样:
1 | from collections import defaultdict |
这对“分组收集数据”尤其好用。
3.3 deque:高效的双端队列
如果你需要频繁从列表头部插入或删除元素,普通 list 性能并不理想。
这时可以使用 deque:
1 | from collections import deque |
它很适合:
- 队列;
- 广度优先遍历;
- 滑动窗口。
3.4 什么时候想到 collections?
你可以简单记住:
- 统计数量 →
Counter - 自动默认值 →
defaultdict - 两端高效插入删除 →
deque
这几个就已经能覆盖很多常见场景。
四、pathlib:更现代的路径与文件操作方式
4.1 为什么推荐 pathlib?
过去很多教程会大量使用 os.path 来处理路径,例如:
1 | import os |
这没问题,但 Python 现在更推荐使用 pathlib,因为它更直观、更面向对象,也更适合跨平台。
4.2 创建路径对象
1 | from pathlib import Path |
这里的 / 不是除法,而是路径拼接,读起来非常自然。
4.3 判断文件或目录是否存在
1 | from pathlib import Path |
4.4 读取和写入文本文件
1 | from pathlib import Path |
这种写法比手动 open() 更简洁。
4.5 遍历目录
1 | from pathlib import Path |
查找某类文件:
1 | from pathlib import Path |
递归查找:
1 | from pathlib import Path |
4.6 pathlib 的核心价值
它最大的优点是:
- 路径表达自然;
- API 清晰;
- 代码可读性强;
- 适合跨平台路径处理。
以后只要是“文件路径”相关操作,建议优先考虑 Path。
五、os 与 sys:和操作系统、解释器打交道
这两个模块经常一起出现,但关注点不同:
os更偏“操作系统接口”;sys更偏“Python 解释器运行环境”。
5.1 os:环境变量、目录、系统信息
1 | import os |
常见用途包括:
- 获取当前工作目录;
- 读取环境变量;
- 创建目录、删除目录;
- 和底层操作系统交互。
不过如果只是做日常文件路径处理,仍然更推荐优先使用 pathlib。
5.2 sys.argv:获取命令行参数
1 | import sys |
如果你运行:
1 | python demo.py hello world |
那么 sys.argv 可能类似:
1 | ['demo.py', 'hello', 'world'] |
这在简单脚本里很有用。
5.3 sys.stderr:输出错误信息
1 | import sys |
它适合输出警告或错误信息,尤其在命令行程序中更规范。
5.4 学习阶段怎么理解这两个模块?
可以先这样记:
- 需要接触操作系统环境时,想到
os; - 需要接触 Python 启动参数、解释器信息时,想到
sys。
六、json:Python 数据与 JSON 之间的转换
现代开发里,json 几乎无处不在:
- 接口返回值;
- 配置文件;
- 前后端通信;
- 数据导出。
6.1 Python 对象转 JSON:dumps()
1 | import json |
这里:
ensure_ascii=False可以正常显示中文;indent=2会让输出更美观。
6.2 JSON 字符串转 Python 对象:loads()
1 | import json |
6.3 文件读写:dump() 和 load()
1 | import json |
6.4 json 的常见注意点
要特别记住:
- JSON 的键通常是字符串;
- 不是所有 Python 对象都能直接转 JSON;
- 比如自定义对象、
datetime对象,往往需要先转换成可序列化结构。
6.5 什么时候想到 json?
以后只要遇到:
- Web 接口数据;
- 配置传输;
- 前后端交换结构化数据;
就应该第一时间想到它。
七、re:正则表达式的入门实战
7.1 正则表达式解决什么问题?
当你需要在文本里做下面这些事情时,正则表达式就非常有用:
- 查找某种模式;
- 批量提取信息;
- 替换符合规则的文本;
- 验证输入格式。
例如:
- 提取邮箱;
- 找手机号;
- 替换重复空格;
- 检查账号格式是否合法。
7.2 最常用的几个函数
(1)match():从开头匹配
1 | import re |
它要求从字符串开头就匹配。
(2)search():搜索第一个匹配
1 | import re |
(3)findall():找出所有匹配
1 | import re |
(4)sub():替换匹配内容
1 | import re |
7.3 一个邮箱提取示例
1 | import re |
7.4 学正则最重要的建议
不要一开始就试图把所有规则背下来。
更合理的方式是:
- 先掌握最常见的几个符号;
- 知道
findall()、search()、sub()这些常用入口; - 真遇到复杂模式时再查文档。
对大多数开发者来说,这样就够用了。
八、hashlib:生成哈希摘要
hashlib 常用于:
- 校验文件内容是否变化;
- 生成摘要;
- 做简单的数据完整性校验;
- 密码存储中的摘要步骤(真实项目还要配合加盐等策略)。
8.1 计算字符串的 MD5
1 | import hashlib |
8.2 计算 SHA256
1 | import hashlib |
8.3 文件摘要的常见思路
1 | import hashlib |
8.4 使用提醒
学习阶段你至少要知道:
hashlib可以快速生成摘要;- 常见算法有
md5()、sha1()、sha256(); - 涉及安全场景时,不能只停留在“会调 API”,还要理解安全设计原则。
九、itertools:高效迭代工具
itertools 是一个很实用但常被初学者忽视的模块。
它的核心思想是:
用更高效、更简洁的方式处理迭代器和序列。
9.1 count():无限计数器
1 | from itertools import count |
9.2 cycle():循环重复
1 | from itertools import cycle |
9.3 repeat():重复同一个值
1 | from itertools import repeat |
9.4 chain():连接多个可迭代对象
1 | from itertools import chain |
9.5 islice():切片式获取迭代结果
1 | from itertools import islice, count |
9.6 如何理解 itertools 的价值?
它非常适合:
- 惰性处理数据;
- 组合多个迭代流程;
- 避免不必要的中间列表;
- 写出更 Pythonic 的循环逻辑。
在数据量较大、处理过程可流式化时,它尤其有价值。
十、这些模块之间如何配合使用?
真正写程序时,标准库很少是单独出现的,它们通常会组合使用。
比如一个日志分析脚本,可能会这样协作:
- 用
pathlib找到日志文件; - 用
datetime解析日志时间; - 用
re提取关键信息; - 用
Counter统计错误类型出现次数; - 用
json把统计结果导出。
再比如一个简单的命令行工具:
- 用
sys.argv读取参数; - 用
Path处理文件路径; - 用
hashlib计算文件摘要; - 用
json输出结果。
这也是学习标准库时非常重要的一点:
不要把它们看成零散的知识点,而要把它们看成可以拼装起来的一组工具箱。
十一、学习建议:标准库应该怎么学才不容易乱?
11.1 不要试图一次学完整个标准库
标准库很大,真的没有必要一次性全学完。
更合理的方式是优先掌握高频模块,例如:
datetimecollectionspathlibjsonreossys
这些已经能覆盖大量真实场景。
11.2 学模块时要抓“适用问题”
例如你不需要一开始背下 Counter 的所有方法,但要记住:
- 看到“频次统计”,就想到它;
- 看到“路径操作”,就想到
Path; - 看到“字符串时间转换”,就想到
datetime; - 看到“结构化文本交换”,就想到
json。
这比死记 API 更实用。
11.3 多写小工具,效果最好
学习标准库最好的方式之一,就是写一些小而完整的脚本,例如:
- 文件重命名脚本;
- 日志统计脚本;
- JSON 配置处理脚本;
- 正则提取脚本;
- 文件摘要校验脚本。
因为标准库本来就是为“解决具体问题”而存在的。
11.4 学会查官方文档
标准库学习到后面,一个非常重要的能力就是查文档。
因为模块很多,不可能全部背住。
真正成熟的开发者通常不是“什么都背”,而是:
- 知道大概有这个模块;
- 知道它大概能干什么;
- 需要时能快速查到正确用法。
十二、总结
这一篇我们围绕 Python 中最常见的一批标准库模块做了一个实战导向的梳理:
datetime:处理日期、时间、格式化和时间差计算;collections:提供Counter、defaultdict、deque等更顺手的容器;pathlib:用更现代、更清晰的方式操作路径和文件;os与sys:帮助程序与操作系统和解释器环境交互;json:完成 Python 数据与 JSON 之间的相互转换;re:基于模式匹配进行搜索、提取和替换;hashlib:生成哈希摘要,用于校验和摘要计算;itertools:提供高效、优雅的迭代工具。
如果说前面的章节主要是在学习“Python 语言本身怎么写”,那么这一篇更像是在学习:
拿到一个真实需求后,Python 标准库里有哪些现成工具可以直接帮你解决问题。
掌握这些模块之后,你写脚本、做数据处理、读写文件、处理文本时都会轻松很多。
继续往后写时,比较自然的衔接方向通常有两个:
- 文件读写与数据处理实战:文本、CSV、JSON、目录遍历、批量处理;
- 网络编程与常用第三方库入门:为后续更贴近工程开发的内容铺路。