Python
Python 常用标准库速查
整理 random、time、datetime、os、sys、json 等常用标准库的核心用法与易错点。
1. random —— 随机模块
| 方法 | 作用 | 备注 |
|---|---|---|
random.random() |
生成 [0, 1) 的浮点数 |
|
random.randint(a, b) |
生成 [a, b] 的整数 |
两端都包含(与 Java 的 Random.nextInt 不同) |
random.choice(seq) |
随机取 1 个元素 | |
random.sample(seq, n) |
随机取 n 个元素 | 返回新列表,不重复抽取 |
random.shuffle(l) |
原地打乱 | 无返回值,只能作用于可变类型(如 list) |
import random
l = [1, 2, 3, 4, 5]
random.shuffle(l) # 原地打乱,返回 None
print(l)WARNING 易错点
random.shuffle()是原地操作,写l = random.shuffle(l)会把l变成None。
2. time 模块
import time
time.time() # 当前时间戳(float,秒)
time.localtime() # 当前本地时间(struct_time,可取 .tm_year 等属性)
time.localtime(1782978205) # 时间戳 → 本地时间
time.gmtime(1782978205) # 时间戳 → UTC 时间(格林尼治)
time.strftime('%Y/%m/%d %H:%M:%S', time.localtime()) # 格式化输出localtime()按本地时区转换,gmtime()按 UTC(0 时区) 转换,两者相差时区偏移。
3. datetime 模块
3.1 datetime 类
import datetime
datetime.datetime.now() # 当前时间
datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S') # 格式化
# 自定义构造
t = datetime.datetime(year=2020, month=10, day=1,
hour=10, minute=10, second=10, microsecond=1000)
t.year # 直接取属性
t.strftime('%Y/%m/%d %H:%M:%S.%f%z') # %f 微秒,%z 时区3.2 date 类
datetime.date.today() # 只有日期,没有时间;不支持 now()3.3 timedelta —— 时间差
t1 = datetime.datetime(2020, 10, 1, 10, 10, 10)
t2 = datetime.datetime.now()
diff = t2 - t1 # 得到 timedelta 对象(天数 + 秒数)3.4 relativedelta —— 精确到年/月/日的差值(第三方 dateutil)
from dateutil.relativedelta import relativedelta
t = relativedelta(t2, t1)
print(f'总共相差了{t.years}年{t.months}月{t.days}天')TIP timedelta vs relativedelta
timedelta:标准库,只表示"总天数 + 秒",没有年、月的概念relativedelta:第三方dateutil,能拆出年 / 月 / 日的差值,更贴近人类表达
常用格式化占位符
| 占位符 | 含义 | 占位符 | 含义 |
|---|---|---|---|
%Y |
四位年份 | %H |
时(24 制) |
%m |
月 | %M |
分 |
%d |
日 | %S |
秒 |
%f |
微秒 | %z |
时区偏移 |
4. sys 模块 —— 解释器与脚本控制
4.1 sys.argv —— 命令行参数
python day_31_常用模块.py 1 2 3import sys
sys.argv # 列表;argv[0] 永远是脚本名,参数从 argv[1] 开始
if len(sys.argv) > 1:
print("参数为:", sys.argv[1:])类比:相当于 Java 的
public static void main(String[] args)里的args,只是 Python 把脚本名放在了第 0 位。
4.2 sys.exit() —— 退出脚本
sys.exit(1) # 立即退出,后续代码不再执行;非 0 表示异常退出4.3 sys.path —— 模块搜索路径
sys.path # 列表,import 时按此查找模块
sys.path.append('D:\\my_project') # 临时添加自定义模块搜索路径
import abcabc # 之后就能找到该目录下的模块4.4 版本信息
sys.version # 完整版本字符串
sys.version_info # 具名元组,可比较大小
sys.version_info.major # 主版本
sys.version_info.minor # 次版本
sys.version_info.micro # 小版本
# 部署时做版本检查
if sys.version_info < (3, 10, 22):
sys.exit(1)5. os 模块 —— 路径与目录操作
5.1 工作目录
os.getcwd() # 获取当前工作目录(绝对路径)
os.chdir(path) # 切换工作目录
os.listdir(path) # 列出目录下的文件/文件夹;不传参 = 当前目录5.2 创建与删除
| 操作 | 方法 | 限制 |
|---|---|---|
| 创建单级目录 | os.mkdir(p) |
已存在会报错 |
| 递归创建多级目录 | os.makedirs(p, exist_ok=True) |
exist_ok=True 已存在不报错 |
| 删除文件 | os.remove(f) |
只能删文件 |
| 删除单个空目录 | os.rmdir(p) |
非空报错 |
| 递归删除空目录 | os.removedirs(p) |
从子到父逐级删,全程必须为空 |
| 重命名/移动 | os.rename(old, new) |
也可实现跨目录移动 |
5.3 判断存在性
os.path.isdir(p) # 是目录且存在 → True
os.path.isfile(p) # 是文件且存在 → True(兼容 / 和 \ 分隔符)
os.path.exists(p) # 文件或目录,存在即 True5.4 路径拼接与解析
os.path.join('D:\\my_project', 'D', 'E') # 自动按系统分隔符拼接
os.path.basename('D:/my_project/abcabc.py') # 取最后一级 → 'abcabc.py'6. shutil 模块 —— 高级文件操作
import shutil
shutil.rmtree("D:/my_project/a") # 递归删除目录及其下所有文件
# 等价于 Linux 的 rm -rf ./aWARNING os.rmdir vs shutil.rmtree
os.rmdir/os.removedirs:只能删空目录shutil.rmtree:目录非空也直接连锅端,慎用!
7. json 模块 —— 序列化与反序列化
7.1 核心概念
- 序列化:Python 数据类型 → JSON 格式字符串(
json.dumps) - 反序列化:JSON 字符串 → Python 数据类型(
json.loads) - JSON 整体就是一个字符串;键和字符串值必须用双引号;
[]叫数组(不叫列表)
import json
jj = {"name": "陈冠希", "age": 20, "bobby": ["唱", "演戏", "拍视频"]}
j_json = json.dumps(jj) # dict → JSON 字符串(序列化)
type(j_json) # <class 'str'>
dict_jj = json.loads(j_json) # JSON 字符串 → dict(反序列化)
dict_jj["name"] # '陈冠希'7.2 类型映射与大小写陷阱
| Python | JSON |
|---|---|
dict |
object {} |
list / tuple |
array [] |
str |
string(双引号) |
int / float |
number |
True / False |
true / false(全小写) |
None |
null |
jj = '{"name":"陈冠希","age":20,"is_ok":true}' # ✅ true 小写才合法
json.loads(jj) # 若写成 True 会解析报错7.3 写入文件
with open('json001.json', 'w') as f:
f.write(j_json) # 把序列化后的字符串写入文件
# 也可直接用 json.dump(jj, f),一步到位TIP 记忆口诀
dumps/loads带 s → 操作字符串(str);dump/load不带 s → 直接操作文件对象。