Python 标准库:你身边藏着一把瑞士军刀
我是陈默,一个正拼命上岸的码农。
你有没有干过这种事——
想处理 JSON,去 pip 装一个第三方库。想解析 URL,又去 pip 装一个。想生成随机数,再去 pip 装一个。
装了一圈回来发现,这些功能 Python 自带的就有。
Python 的标准库里有超过 200 个模块。很多人学了几年 Python,连一半都没碰过。
这就像你买了一把瑞士军刀,却只用它开啤酒瓶。
今天我带你快速过一遍,哪些标准库模块最值得你花时间掌握。
1. 文件和目录操作
你写代码,不可能不跟文件打交道。
os —— 操作系统交互:
import os# 获取当前目录print(os.getcwd())# 创建目录os.makedirs("new_folder", exist_ok=True)# 列出目录内容files = os.listdir(".")
pathlib —— 更优雅的路径操作:
from pathlib import Path# 创建路径对象p = Path("my_project/data")# 创建目录p.mkdir(parents=True, exist_ok=True)# 遍历所有 .py 文件for f in p.glob("**/*.py"): print(f)
pathlib 比 os.path 好用太多。如果你还在拼路径字符串,赶紧换过来。
shutil —— 高级文件操作:
import shutil# 复制文件shutil.copy("source.txt", "dest.txt")# 复制整个目录shutil.copytree("old_dir", "new_dir")# 删除目录shutil.rmtree("unwanted_dir")
复制、移动、删除,一个模块全搞定。
2. 数据处理三剑客
日常开发中,你用得最多的就是数据转换和处理。
json —— JSON 解析:
import json# 字典转 JSON 字符串data = {"name": "陈默", "age": 28}json_str = json.dumps(data, ensure_ascii=False)# JSON 字符串转字典parsed = json.loads(json_str)# 直接读写文件with open("data.json", "w") as f: json.dump(data, f, ensure_ascii=False)with open("data.json") as f: loaded = json.load(f)
Web 开发、API 调用、配置文件,到处都是 JSON。这个模块你一定会用到。
collections —— 特殊容器:
from collections import Counter, defaultdict, OrderedDict# 统计词频words = ["python", "java", "python", "go", "python"]print(Counter(words))# Counter({'python': 3, 'java': 1, 'go': 1})# 默认值字典,不再怕 KeyErrord = defaultdict(list)d["fruits"].append("apple")# 不用手动判断 key 是否存在# 有序字典(Python 3.7+ 普通 dict 已经有序了)od = OrderedDict([("a", 1), ("b", 2)])
itertools —— 迭代器工具:
from itertools import combinations, chain, groupby# 组合for pair in combinations(["A", "B", "C"], 2): print(pair)# ('A', 'B'), ('A', 'C'), ('B', 'C')# 拼接多个列表merged = list(chain([1, 2], [3, 4], [5]))# 分组data = sorted([("A", 1), ("A", 2), ("B", 3)], key=lambda x: x[0])for key, group in groupby(data, key=lambda x: x[0]): print(key, list(group))
这三个模块组合起来,能帮你省掉大量的 for 循环和 if 判断。
3. 日期和时间
时间处理是编程里的高频需求。也是最容易出 bug 的地方。
datetime —— 日期时间:
from datetime import datetime, timedelta, date# 获取当前时间now = datetime.now()print(now.strftime("%Y-%m-%d %H:%M:%S"))# 日期计算tomorrow = date.today() + timedelta(days=1)last_week = datetime.now() - timedelta(weeks=1)# 字符串转日期parsed = datetime.strptime("2024-03-15", "%Y-%m-%d")# 日期转字符串formatted = parsed.strftime("%Y年%m月%d日")
日志记录、定时任务、数据分析,都离不开时间处理。
记住一个原则——永远用 datetime 模块处理时间,不要手动拼字符串。
4. 实用工具
还有一些模块,虽然不起眼,但关键时刻能救命。
re —— 正则表达式:
import re# 提取邮箱text = "联系我: chenmo@example.com 或 admin@test.cn"emails = re.findall(r'[\w.-]+@[\w.-]+\.\w+', text)# 替换文本clean = re.sub(r'\d+', '[数字]', "订单号12345已发货")# 验证手机号pattern = r'^1[3-9]\d{9}$'is_valid = bool(re.match(pattern, "13800138000"))
正则表达式很强大,但别过度使用。简单的字符串操作用 str 方法就够了。
logging —— 日志记录:
import logginglogging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')logging.debug("调试信息")logging.info("普通信息")logging.warning("警告信息")logging.error("错误信息")
别再 print 调试了。用 logging,你至少能控制日志级别和输出格式。
argparse —— 命令行参数解析:
import argparseparser = argparse.ArgumentParser(description="数据处理工具")parser.add_argument("--input", required=True, help="输入文件路径")parser.add_argument("--output", default="result.txt", help="输出文件路径")parser.add_argument("--verbose", action="store_true", help="详细输出")args = parser.parse_args()print(f"处理 {args.input},输出到 {args.output}")
写脚本的时候,命令行参数比硬编码路径专业一百倍。
最后
Python 标准库有一个设计哲学——batteries included(自带电池)。
意思是,你拿到 Python 就已经拥有了大部分常用工具。不需要额外安装任何东西。
回顾一下今天介绍的模块:
- 数据处理:
json、collections、itertools
这只是冰山一角。标准库里还有 http、socket、threading、unittest、csv 等大量模块等着你去探索。
我的建议是——下次遇到问题,先查查标准库里有没有现成的方案。大概率有。
今天就到这里。
我是陈默,我们下期再见。
如果你觉得这篇文章有帮助,欢迎关注我。我会持续分享 Python 学习的干货。