Python3 标准库概览

Python3 学习笔记 · 整理自菜鸟教程

一句话

「自带电池」的 Python 内置了大量模块,覆盖文件、系统、网络、日期、正则、数据格式、加密等场景,学会常用模块能省下大量造轮子的时间。

要点

  • 标准库随 Python 一起安装,import 即用,无需 pip
  • 按用途记两大类:通用工具(os/sys/math/random/datetime/json/re)和领域工具(socket/urllib/sqlite3/hashlib/logging)。
  • 学会「按需求找模块」比背 API 重要:需要什么先想标准库有没有。
  • 查看帮助:help(模块)dir(模块)、官方文档 docs.python.org/3/library/。
  • 大多数模块要显式 import,但 mathjson 这类常用模块几乎每个项目都会遇到。

语法 / 常用方法

模块 用途 常用对象/方法
os 操作系统/文件路径 os.path.joinos.listdiros.getcwd
sys 解释器/命令行 sys.argvsys.exitsys.path
math 数学函数 math.sqrtmath.pimath.floor
random 随机数 random.randintrandom.choicerandom.shuffle
datetime 日期与时间 datetime.nowtimedeltastrftime
time 时间戳/延时 time.timetime.sleep
json JSON 编解码 json.dumpsjson.loads
re 正则表达式 re.matchre.findallre.sub
collections 增强容器 Counterdefaultdictdequenamedtuple
itertools 迭代器工具 chainproductgroupbycount
functools 函数工具 reducelru_cachepartial
pathlib 面向对象路径 PathPath.globread_text
hashlib 哈希/摘要 md5sha256
statistics 统计计算 meanmedianstdev
logging 日志 logging.infobasicConfig
argparse 命令行参数解析 ArgumentParseradd_argument
sqlite3 内置轻量数据库 connectexecute
urllib URL/HTTP 请求 urllib.request.urlopen
socket 底层网络 socket.socket
subprocess 调用外部命令 subprocess.run
csv CSV 读写 csv.readercsv.writer
io 流式 IO StringIOBytesIO
pickle 对象序列化 pickle.dumpspickle.load
threading 线程 ThreadLock
asyncio 异步编程 runcreate_task
uuid 唯一 ID uuid.uuid4
zlib / gzip 压缩 zlib.compressgzip.open
webbrowser 打开浏览器 webbrowser.open
pprint 美观打印 pprint.pprint
shutil 高级文件操作 copymovermtree

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 几个最常打交道的标准库速览
import os, sys, math, random
from datetime import datetime, timedelta
import json
from collections import Counter

# os / sys:环境与系统
print(os.getcwd())
print("启动参数:", sys.argv[:1]) # 处理命令行参数用 argparse 更规范

# math:数学
print(math.sqrt(16), math.floor(3.7), round(math.pi, 2)) # 4.0 3 3.14

# random:随机
print(random.randint(1, 6)) # 掷骰子
print(random.choice(["石头", "剪刀", "布"]))

# datetime:日期时间
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))
print((now + timedelta(days=7)).date()) # 一周后

# json:字符串与对象互转
data = {"name": "Tom", "age": 18}
s = json.dumps(data, ensure_ascii=False)
print(s) # {"name": "Tom", "age": 18}
print(json.loads(s)["name"]) # Tom

# collections:统计词频
words = "a b a c a b".split()
print(Counter(words)) # Counter({'a': 3, 'b': 2, 'c': 1})

易错点

  • 变量名别和模块重名import random 后又 random = 5,之后 random.randint 就报错。
  • os vs os.path:路径操作在 os.path 下,别写成 os.join(不存在)。
  • datetime 是模块也是类import datetime 后用 datetime.datetime.now()from datetime import datetime 后直接用 datetime.now(),两种写法别混。
  • random 不加密安全:涉及密码/令牌用 secrets 模块。
  • json.dumps 中文默认转义:加 ensure_ascii=False 才显示中文。
  • 标准库选择有偏好:新代码路径操作用 pathlib,命令调用用 subprocess.run 而非 os.system