Python: 标准库入门(上)

Python 最强大的特性之一就是"内置电池"——安装 Python 时已经带了一整套标准库。这一课介绍四个最常用的模块:randomtimesysos。虽然每个只学最常用的几个函数,但已经能解决很多实际问题了。


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. 常见应用场景


❓ 常见问题

Q random 模块适合做密码学安全的随机数吗?
A 不适合。random 模块用的是伪随机数生成器(PRNG),可预测。需要密码学安全的随机数(如生成密码、Token)用 secrets 模块。
Q time.sleep() 会让整个程序停住,怎么实现"不阻塞的延迟"?
A 是的,sleep() 会阻塞当前线程。如果需要非阻塞延迟,可以用多线程或在异步框架(如 asyncio)中实现。简单场景下 sleep() 够用了。
Q ospathlib 用哪个?
A Python 3.4+ 推荐用 pathlib(更面向对象、更直观),但 os 更底层、功能更全。新项目建议用 pathlib,需要底层系统调用时用 os

📖 小节


📝 作业

  1. 基础题(难度⭐):写一个程序,生成 10 个 1 到 100 之间的随机整数,输出它们和它们的平均值。

  2. 进阶题(难度⭐⭐):写一个"密码生成器"函数 generate_password(length=8),生成包含大小写字母和数字的随机密码。提示:用 string.ascii_letters + string.digits 作为字符池,用 random.choice() 逐个选取。

  3. 挑战题(难度⭐⭐⭐):写一个"文件夹统计工具"。给定一个目录路径(通过 sys.argv 传入),统计该目录下各种文件类型(扩展名)的数量和总大小。提示:用 os.listdir() 遍历,用 os.path.splitext() 获取扩展名,用 os.path.getsize() 获取文件大小。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏