在这里插入图片描述
在这里插入图片描述

🧰 说明:Python 被称为“自带电池”(Batteries Included),其标准库提供了大量高质量、跨平台的模块,覆盖文件处理、日期时间、数据结构、系统交互等常见需求。本篇精选10 个最实用的标准库模块,助你少写代码、少装依赖、写出更地道的 Python 程序。

你将掌握:

  • 如何高效处理日期与时间(datetime
  • 强大的路径操作(pathlib vs os.path
  • 安全的临时文件(tempfile
  • 高效计数与分组(collections
  • 数据序列化新选择(pickle vs json
  • 命令行参数进阶(argparse 补充)
  • 以及其他宝藏模块(shutil, glob, itertools, functools

1. datetime:日期与时间处理

核心类

用途
datetime 日期+时间(最常用)
date 仅日期
time 仅时间
timedelta 时间差

常用操作

from datetime import datetime, timedelta

# 当前时间
now = datetime.now()
print(now)  # 2025-12-22 16:30:45.123456

# 解析字符串
dt = datetime.fromisoformat("2025-12-22T10:00:00")
# 或
dt = datetime.strptime("22/12/2025", "%d/%m/%Y")

# 格式化输出
print(now.strftime("%Y年%m月%d日 %H:%M"))  # 2025年12月22日 16:30

# 时间计算
tomorrow = now + timedelta(days=1)
diff = tomorrow - now  # timedelta 对象

最佳实践

  • 存储时间用 ISO 8601 格式"2025-12-22T16:30:00"
  • 涉及时区用 zoneinfo(Python 3.9+)或第三方库 pytz

2. pathlib:面向对象的路径操作(推荐!)

替代老旧的 os.path,代码更简洁、可读。

对比示例

from pathlib import Path

# 创建路径对象
p = Path("data") / "input.txt"

# 检查存在性
if p.exists():
    print(f"文件大小: {p.stat().st_size} 字节")

# 读写文本(自动处理编码)
content = p.read_text(encoding="utf-8")
p.write_text("Hello", encoding="utf-8")

# 遍历目录
for file in Path("logs").glob("*.log"):
    print(file)

# 获取家目录
home = Path.home()

💡 优势

  • / 操作符拼接路径(跨平台)
  • 方法链式调用
  • 自动处理不同操作系统路径分隔符

3. tempfile:安全创建临时文件/目录

避免手动命名临时文件导致的冲突或安全问题。

import tempfile

# 创建临时文件(自动删除)
with tempfile.NamedTemporaryFile(mode="w+", delete=True) as tmp:
    tmp.write("临时数据")
    tmp.flush()
    print(tmp.name)  # /tmp/tmp12345.txt

# 创建临时目录
with tempfile.TemporaryDirectory() as tmpdir:
    temp_path = Path(tmpdir) / "data.txt"
    temp_path.write_text("测试")
    # 退出 with 块后自动删除整个目录

🔒 适用场景

  • 下载中间文件
  • 测试时生成临时数据
  • 安全敏感操作

4. collections:增强版容器

4.1 defaultdict:带默认值的字典

from collections import defaultdict

# 统计词频
word_count = defaultdict(int)
for word in ["apple", "banana", "apple"]:
    word_count[word] += 1  # 无需检查 key 是否存在

# 分组
groups = defaultdict(list)
for name in ["Alice", "Bob", "Charlie"]:
    groups[len(name)].append(name)
# {5: ['Alice'], 3: ['Bob'], 7: ['Charlie']}

4.2 Counter:快速计数

from collections import Counter

cnt = Counter(["red", "blue", "red", "green"])
print(cnt.most_common(2))  # [('red', 2), ('blue', 1)]
print(cnt["red"])          # 2

4.3 deque:双端队列(高效插入/弹出)

from collections import deque

# 模拟浏览器历史记录
history = deque(maxlen=3)
history.append("page1")
history.append("page2")
history.appendleft("page0")  # 从左边加
# deque(['page0', 'page1', 'page2'], maxlen=3)

5. pickle:Python 对象序列化

将任意 Python 对象保存到文件(仅限可信环境!)。

import pickle

data = {"users": [Task("学习"), Task("编码")]}  # 包含自定义对象

# 序列化
with open("data.pkl", "wb") as f:
    pickle.dump(data, f)

# 反序列化
with open("data.pkl", "rb") as f:
    loaded = pickle.load(f)

⚠️ 严重警告

  • 不要反序列化不可信来源的 pickle 文件(可执行任意代码!)
  • 跨语言/长期存储 → 用 json
  • 仅用于 Python 内部临时缓存

6. argparse 进阶技巧(补充第 20 篇)

子命令 + 默认值 + 类型转换

import argparse
from pathlib import Path

parser = argparse.ArgumentParser()
parser.add_argument(
    "--config",
    type=Path,                  # 自动转为 Path 对象
    default=Path("config.json"),
    help="配置文件路径"
)
parser.add_argument(
    "--verbose", "-v",
    action="store_true",        # 无参数开关
    help="启用详细输出"
)

args = parser.parse_args()
if args.verbose:
    print(f"使用配置: {args.config}")

7. 其他宝藏模块速览

模块 用途 示例
shutil 高级文件操作 shutil.copy2(src, dst)(保留元数据)
glob 文件名模式匹配 glob.glob("*.py") → 所有 Python 文件
itertools 迭代器工具 itertools.chain([1,2], [3,4])[1,2,3,4]
functools 高阶函数工具 @functools.lru_cache(缓存函数结果)
hashlib 安全哈希 hashlib.sha256(b"hello").hexdigest()
secrets 密码学安全随机数 secrets.token_urlsafe(16)(生成安全 token)

实用片段

# 递归复制目录
shutil.copytree("src", "backup", dirs_exist_ok=True)

# 生成安全密码
import secrets
password = secrets.token_hex(8)  # 'a1b2c3d4e5f6g7h8'

# 缓存耗时函数
from functools import lru_cache

@lru_cache(maxsize=128)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

8. 如何查找标准库?

方法1:官方文档

方法2:交互式帮助

import shutil
help(shutil.copy2)  # 查看函数文档

# 列出模块所有属性
dir(shutil)

方法3:搜索关键词

  • “Python 读取 CSV” → csv 模块
  • “Python 压缩文件” → zipfile, tarfile
  • “Python 多线程” → threading, concurrent.futures

9. 最佳实践总结

场景 推荐模块
路径操作 pathlib(非 os.path
日期时间 datetime + zoneinfo
临时文件 tempfile
计数/分组 collections.Counter, defaultdict
对象持久化 可信环境用 pickle,否则用 json
命令行工具 argparse(非 sys.argv 手动解析)
安全随机 secrets(非 random

🐍 原则
“先查标准库,再考虑第三方包。”
减少依赖 = 提升稳定性 + 降低安全风险


下一步练习

  1. pathlib 重写你的 To-Do List 的文件路径逻辑
  2. 添加任务创建时间字段,用 datetime 记录并格式化显示
  3. collections.Counter 统计任务完成状态分布
  4. 尝试用 tempfile 为配置文件写入实现“安全保存”

🔋 标准库是你最可靠的伙伴。
掌握它,你就拥有了 Python 开发的“超能力”!

继续探索,用标准库构建更强大、更简洁的应用!
在这里插入图片描述
在这里插入图片描述

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐