Python: 标准库入门(上)
Python 最强大的特性之一就是"内置电池"——安装 Python 时已经带了一整套标准库。这一课介绍四个最常用的模块:
random、time、sys、os。虽然每个只学最常用的几个函数,但已经能解决很多实际问题了。
1. random——随机数
PYTHON
import random
# 随机小数 [0, 1)
print(random.random()) # 0.3745...
# 随机整数 [a, b](包含两端)
print(random.randint(1, 10)) # 1 到 10 之间的随机整数
# 随机选择
fruits = ["苹果", "香蕉", "橘子", "葡萄"]
print(random.choice(fruits)) # 随机选一个
# 随机抽样(不重复)
print(random.sample(fruits, 2)) # 随机选 2 个
# 打乱顺序
cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
random.shuffle(cards)
print(cards) # 顺序被打乱了
▶ 示例:抽奖程序(难度⭐)
PYTHON
import random
# 抽奖池
participants = ["Alice", "Bob", "Charlie", "赵六", "孙七",
"周八", "吴九", "郑十"]
# 一等奖 1 名
first = random.choice(participants)
print(f"🎉 一等奖:{first}")
# 二等奖 2 名(排除已中奖的)
remaining = [p for p in participants if p != first]
second = random.sample(remaining, 2)
print(f"🎊 二等奖:{'、'.join(second)}")
# 三等奖 3 名
remaining = [p for p in remaining if p not in second]
third = random.sample(remaining, 3)
print(f"🎁 三等奖:{'、'.join(third)}")
输出:
TEXT
📖 仅展示
# 执行成功
2. time——时间处理
PYTHON
import time
# 当前时间戳(从 1970-01-01 到现在的秒数)
print(time.time()) # 1758588800.123
# 暂停执行(秒)
print("开始")
time.sleep(1) # 暂停 1 秒
print("1 秒后")
# 格式化当前时间
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2026-06-23 16:00:00
print(time.strftime("%Y年%m月%d日 %H时%M分")) # 2026年06月23日 16时00分
▶ 示例:计时器(难度⭐)
PYTHON
import time
def countdown(seconds):
"""倒计时"""
while seconds > 0:
print(f"\r⏱ 还剩 {seconds} 秒", end="")
time.sleep(1)
seconds -= 1
print("\r⏰ 时间到!")
# countdown(5) # 取消注释试试
# 测量代码执行时间
start = time.time()
total = sum(range(1000000))
end = time.time()
print(f"执行时间:{end - start:.4f} 秒")
输出:
TEXT
📖 仅展示
\r⏰ 时间到!
3. sys——系统交互
PYTHON
import sys
# Python 版本
print(sys.version) # 3.13.0 ...
# 命令行参数(运行 python script.py a b c 时)
print(sys.argv) # ['script.py', 'a', 'b', 'c']
# 退出程序
# sys.exit(0) # 正常退出
# 标准输入
# line = sys.stdin.readline() # 读取一行输入
▶ 示例:命令行计算器(难度⭐⭐)
PYTHON
import sys
def main():
# 用法: python calculator.py 3 + 5
if len(sys.argv) != 4:
print("用法:python calculator.py 数字1 运算符 数字2")
print("示例:python calculator.py 3 + 5")
return
a = float(sys.argv[1])
op = sys.argv[2]
b = float(sys.argv[3])
if op == "+":
result = a + b
elif op == "-":
result = a - b
elif op == "*":
result = a * b
elif op == "/":
if b == 0:
print("错误:除数不能为0")
return
result = a / b
else:
print(f"不支持的运算符:{op}")
return
print(f"{a} {op} {b} = {result}")
if __name__ == "__main__":
main()
输出:
TEXT
📖 仅展示
用法:python calculator.py 数字1 运算符 数字2
示例:python calculator.py 3 + 5
错误:除数不能为0
4. os——操作系统
PYTHON
import os
# 当前工作目录
print(os.getcwd()) # D:\project
# 切换目录
# os.chdir("/tmp")
# 列出目录内容
for item in os.listdir("."):
print(item)
# 创建目录
# os.mkdir("new_folder")
# 检查路径
print(os.path.exists("test.txt")) # True
print(os.path.isfile("test.txt")) # True
print(os.path.isdir("data")) # True
# 路径拼接
path = os.path.join("data", "files", "test.txt")
print(path) # data/files/test.txt
▶ 示例:批量文件重命名(难度⭐⭐)
PYTHON
import os
def batch_rename(directory, prefix):
"""批量重命名目录下的所有 .txt 文件"""
files = [f for f in os.listdir(directory) if f.endswith(".txt")]
for i, filename in enumerate(files, 1):
old_path = os.path.join(directory, filename)
new_name = f"{prefix}_{i:03d}.txt"
new_path = os.path.join(directory, new_name)
os.rename(old_path, new_path)
print(f" {filename} → {new_name}")
print("批量重命名示例(只显示,不执行):")
print("遍历所有 .txt 文件,改为 prefix_001.txt 格式")
输出:
TEXT
📖 仅展示
批量重命名示例(只显示,不执行):
遍历所有 .txt 文件,改为 prefix_001.txt 格式
5. 常见应用场景
- random:抽奖、验证码、随机生成测试数据、游戏随机事件。
- time:延迟执行、性能计时、计时器、定时任务。
- sys:读取命令行参数、控制程序退出、获取 Python 环境信息。
- os:文件管理、目录操作、路径处理、批量重命名。
❓ 常见问题
Q
random 模块适合做密码学安全的随机数吗?A 不适合。
random 模块用的是伪随机数生成器(PRNG),可预测。需要密码学安全的随机数(如生成密码、Token)用 secrets 模块。Q
time.sleep() 会让整个程序停住,怎么实现"不阻塞的延迟"?A 是的,
sleep() 会阻塞当前线程。如果需要非阻塞延迟,可以用多线程或在异步框架(如 asyncio)中实现。简单场景下 sleep() 够用了。Q
os 和 pathlib 用哪个?A Python 3.4+ 推荐用
pathlib(更面向对象、更直观),但 os 更底层、功能更全。新项目建议用 pathlib,需要底层系统调用时用 os。📖 小节
random:randint()、choice()、sample()、shuffle()——随机选择与生成time:time()时间戳、sleep()暂停、strftime()格式化sys:argv命令行参数、exit()退出程序os:文件路径检查、目录操作、文件重命名- 以上四个模块是 Python 标准库的"入门四件套",日常开发高频使用
📝 作业
-
基础题(难度⭐):写一个程序,生成 10 个 1 到 100 之间的随机整数,输出它们和它们的平均值。
-
进阶题(难度⭐⭐):写一个"密码生成器"函数
generate_password(length=8),生成包含大小写字母和数字的随机密码。提示:用string.ascii_letters + string.digits作为字符池,用random.choice()逐个选取。 -
挑战题(难度⭐⭐⭐):写一个"文件夹统计工具"。给定一个目录路径(通过
sys.argv传入),统计该目录下各种文件类型(扩展名)的数量和总大小。提示:用os.listdir()遍历,用os.path.splitext()获取扩展名,用os.path.getsize()获取文件大小。