常用内建模块 | Python '内置电池' 快速入门

Python 以「batteries included(开箱即用,内置电池)」为核心设计理念,提供了覆盖日常开发90%以上场景的标准库,无需额外 pip install 即可直接调用。本文梳理了10类高频实用内置模块,附带极简代码示例,帮你快速上手并解决实际问题。


1. 系统交互模块

sys:Python 解释器级操作

直接与解释器、系统环境交互,比如获取版本、处理命令行参数、调整模块搜索路径等。

import sys

# 1. 获取解释器信息(快速定位兼容性问题)
print(f"Python 版本:{sys.version.split()[0]}")  # 输出纯版本号,更直观

# 2. 命令行参数(脚本名是第一个元素)
if __name__ == "__main__":
    print(f"传入参数:{sys.argv[1:]}")  # 跳过脚本名取实际输入

# 3. 强制退出(0表示正常退出,非0为异常)
# sys.exit(1)

# 4. 动态添加模块搜索路径(临时生效,不推荐永久改)
sys.path.append("/path/to/your/custom/modules")

os + pathlib:文件系统操作

os 提供跨平台系统调用接口,但路径拼接等操作容易出错;推荐优先用 pathlib(Python 3.4+),面向对象的路径设计更优雅。

pathlib 极简用法

from pathlib import Path

# 1. 创建路径对象(自动适配 Windows/Linux/macOS)
p = Path.cwd() / "data" / "user.txt"  # 用 / 拼接,自动转义

# 2. 路径属性
print(f"文件名:{p.name}")        # user.txt
print(f"无后缀名:{p.stem}")     # user
print(f"后缀:{p.suffix}")       # .txt
print(f"父目录:{p.parent}")     # ./data

# 3. 文件/目录检查
print(f"路径是否存在:{p.exists()}")
print(f"是否为文件:{p.is_file()}")
print(f"是否为目录:{p.parent.is_dir()}")

# 4. 读写文本(自动处理编码/关闭)
if not p.parent.exists():
    p.parent.mkdir(parents=True, exist_ok=True)  # 递归创建目录
p.write_text("Alice,25,Python")
print(p.read_text())  # 输出:Alice,25,Python

2. 日期与时间处理

datetime:核心日期时间类

处理具体的「日期+时间」「单独日期」「单独时间」「时间差」,支持格式化与解析。

from datetime import datetime, date, timedelta

# 1. 获取当前时间
now_local = datetime.now()    # 本地时区
now_utc = datetime.utcnow()   # UTC时区(推荐后端存储用)
print(f"本地时间:{now_local.strftime('%Y-%m-%d %H:%M:%S')}")

# 2. 创建特定时间
d = date(2024, 12, 31)
t_delta = timedelta(days=7, hours=2)  # 7天2小时

# 3. 时间计算
next_week = now_local + t_delta
days_until_newyear = d - now_local.date()  # 返回timedelta对象
print(f"距离跨年还有:{days_until_newyear.days}天")

# 4. 字符串解析
str_time = "2024-05-20 13:14:00"
dt = datetime.strptime(str_time, "%Y-%m-%d %H:%M:%S")

time:基础时间戳/性能计时

更底层的时间模块,常用场景是获取Unix时间戳代码块性能测试

import time

# 1. Unix时间戳(秒级,float类型)
print(f"当前时间戳:{time.time():.0f}")

# 2. 睡眠(阻塞当前线程)
time.sleep(0.5)  # 睡0.5秒

# 3. 高精度性能计时
start = time.perf_counter()
# 执行测试代码...
sum(range(1000000))
end = time.perf_counter()
print(f"代码耗时:{end - start:.3f}秒")

3. 数据序列化模块

json:通用数据交换格式

与前后端、其他语言交互的首选,只能序列化 Python 的基础类型(dict/list/str/int/float/bool/None)。

import json

data = {
    "name": "Alice",
    "age": 25,
    "skills": ["Python", "FastAPI"],
    "is_active": True
}

# 1. 序列化为字符串(indent美化输出)
json_str = json.dumps(data, indent=2, ensure_ascii=False)  # ensure_ascii=False显示中文
print(json_str)

# 2. 反序列化为对象
data_loaded = json.loads(json_str)

# 3. 读写JSON文件
with open("user.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

with open("user.json", encoding="utf-8") as f:
    data_from_file = json.load(f)

pickle:Python 专属序列化

可以序列化几乎所有 Python 对象(类、函数、实例等),但跨语言不可用、有安全风险(别加载来路不明的pickle文件)。

import pickle

class User:
    def __init__(self, name):
        self.name = name

# 1. 序列化为字节流
user = User("Bob")
pickled_bytes = pickle.dumps(user)

# 2. 反序列化
user_loaded = pickle.loads(pickled_bytes)
print(user_loaded.name)  # Bob

4. 数学与随机数模块

math:基础数学运算

提供常数、三角函数、对数、组合数等基础数学函数。

import math

# 1. 常用常数
print(f"π:{math.pi:.4f}")
print(f"自然常数e:{math.e:.4f}")

# 2. 常用函数
print(f"√16:{math.sqrt(16)}")
print(f"最大公约数:{math.gcd(48, 18)}")  # Python 3.5+
print(f"5选2组合数:{math.comb(5, 2)}")  # Python 3.10+

random:伪随机数生成

用于随机抽样、打乱顺序、生成测试数据等,生产环境如需密码学安全的随机数,用 secrets 模块。

import random

# 1. 固定随机种子(调试时生成可复现的随机结果)
# random.seed(42)

# 2. 随机数生成
print(f"[0,1)浮点数:{random.random():.2f}")
print(f"[1,6]整数:{random.randint(1, 6)}")  # 模拟掷骰子

# 3. 序列操作
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print(f"随机选1个:{random.choice(fruits)}")
print(f"随机选2个不重复:{random.sample(fruits, 2)}")
random.shuffle(fruits)  # 原地打乱
print(f"打乱后:{fruits}")

5. 数据结构增强模块

collections:拓展容器类型

提供 Python 基础容器(list/dict/tuple/set)的增强版,解决特定场景的性能/功能问题。

from collections import defaultdict, Counter, deque, namedtuple

# 1. defaultdict:初始化缺失键值(不用再写if key not in dict)
word_counts = defaultdict(int)
for word in ["a", "b", "a", "c", "a"]:
    word_counts[word] += 1
print(word_counts)  # defaultdict(<class 'int'>, {'a': 3, 'b': 1, 'c': 1})

# 2. Counter:统计序列元素出现次数
cnt = Counter(["a", "b", "a", "c", "a"])
print(f"元素统计:{cnt}")
print(f"前1高频:{cnt.most_common(1)}")  # [('a', 3)]

# 3. deque:双端队列(两端插入/删除O(1),list是O(n))
dq = deque(maxlen=3)  # 固定长度,满了自动移除最早的
dq.append(1)
dq.append(2)
dq.append(3)
dq.append(4)  # 自动移除1
print(dq)  # deque([2, 3, 4], maxlen=3)

# 4. namedtuple:带字段名的元组(像类但不可变)
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"x坐标:{p.x},y坐标:{p[1]}")  # 两种访问方式都支持

6. 调试与性能分析模块

logging:结构化日志记录

print 更专业的调试工具,支持分级别、分文件、格式化输出。

import logging

# 1. 全局配置(建议在程序入口处只配置一次)
logging.basicConfig(
    level=logging.INFO,  # 只记录INFO及以上级别的日志(DEBUG/INFO/WARNING/ERROR/CRITICAL)
    format="%(asctime)s - %(levelname)s - %(message)s",  # 时间-级别-内容
    handlers=[
        logging.FileHandler("app.log", encoding="utf-8"),  # 输出到文件
        logging.StreamHandler()  # 同时输出到控制台
    ]
)

logger = logging.getLogger(__name__)

# 2. 记录不同级别的日志
logger.debug("这是调试信息,默认不显示")
logger.info("程序启动成功")
logger.warning("用户输入格式有误")
logger.error("数据库连接失败")

总结

Python 标准库的「内置电池」足够解决大多数日常问题,优先使用它们的好处是:

  1. 无需安装依赖,项目更轻量;
  2. 经过充分测试,性能和稳定性有保障;
  3. 跨平台兼容,不用处理系统差异;
  4. 官方文档完善,遇到问题容易查。

如果标准库满足不了需求(比如复杂的HTTP请求用 requests,数据分析用 pandas),再考虑第三方库即可。