> 技术文档 > 【Python】常见模块及其用法

【Python】常见模块及其用法


文章目录

    • 1. 什么是模块和包?
    • 2. 常见的模块及其用法
      • 2.1 time
        • 概览
        • 2.1.1 时间获取方法
        • 2.1.2 时间格式化与解析
        • 2.1.3 程序计时与延迟
        • 2.1.4 时间转换
      • 2.2 random
        • 概览
        • 2.2.1 基本随机数
        • 2.2.2 随机整数
        • 2.2.3 序列操作
        • 2.2.4 概率分布
        • 2.2.5 随机种子
        • 2.2.6 状态管理
      • 2.3 os
        • 概览
        • 2.3.1 文件与目录操作
        • 2.3.2 路径处理
        • 2.3.3 系统信息与环境
      • 2.4 sys
        • 概览
        • 2.4.1 命令行参数处理
        • 2.4.2 标准输入/输出控制
        • 2.4.3 系统信息与配置
        • 2.4.4 程序流程控制
      • 2.5 json
        • 概览
        • 2.5.1 基本序列化与反序列化
        • 2.5.2 文件读写操作
        • 2.5.3 高级序列化控制

1. 什么是模块和包?


  • 模块是一个包含python代码的文件(后缀名.py),内容可以包括函数、类、变量等
# 文件名为hello.pydef func():print(\"hello world!\")func()

使用模块

import hello

  • 包是包含多个模块的目录,它通过__init__.py文件(可以是空文件)来标识这是一个Python包。
mypackage/│── __init__.py│── module1.py│── module2.py└── subpackage/ │── __init__.py │── module3.py

使用包

from mypackage import module1,module2from mypackage.subpackage import module3

2. 常见的模块及其用法

本文主要讲解模块有:time random os sys json

  1. time 时间处理
  2. random 生成随机数和实现随机选择功能
  3. os 操作系统交互
  4. sys 系统相关功能
  5. json JSON 数据处理

2.1 time

时间处理


概览
方法 功能 示例 time() 时间戳,1970年1月1日00:00:00 UTC至今的秒数 1753161307.4428105 ctime() 获取可读的时间字符串 “Tue Jul 22 13:15:07 2025\" localtime() 获取结构化时间对象(包含年、月、日等字段) time.struct_time(tm_year=2025, tm_mon=7, tm_mday=22, tm_hour=13, tm_min=15, tm_sec=7, tm_wday=1, tm_yday=203, tm_isdst=0) strftime(\"%Y-%m-%d %H:%M:%S\",struct_time) 时间格式化(字符串) “2025-07-22 13:33:09” strptime(“2025-07-22”) 时间解析 “time.struct_time(tm_year=2025, tm_mon=7, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=203, tm_isdst=-1)” perf_counter()) 精确计时(性能测试) 耗时时间 sleep(2.5) 程序暂停 停顿2.5秒 localtime() 时间戳 -> struct_time 时间类型转化 mktime() struct_time -> 时间戳 时间类型转化
2.1.1 时间获取方法
  1. time.time()
  • 功能:获取当前的时间戳(1970年1月1日00:00:00 UTC至今的秒数)
  • 示例
    import timeprint(time.time()) # 输出:1753161307.4428105(当前时间)
  1. time.ctime()
  • 功能:获取可读的时间字符串
  • 示例
print(time.ctime()) # 输出:“Tue Jul 22 13:15:07 2025”
  1. time.localtime()
  • 功能:获取结构化时间对象(包含年、月、日等字段)
  • 示例
struct_time = time.localtime()print(struct_time.tm_year, struct_time.tm_mon,struct_time.tm_mday) # 输出:2025 7 22
2.1.2 时间格式化与解析
  1. time.strftime()
  • 功能:时间格式化
  • 示例
struct_time = time.localtime()formatted = time.strftime(\"%Y-%m-%d %H:%M:%S\",struct_time)# 输出 2025-07-22 13:33:09
  1. time.strptime()
  • 功能:时间解析(字符串 -> struct_time)
  • 示例
parsed_time = time.strptime(\"2025-07-22\", \"%Y-%m-%d\") print(parsed_time)# 输出:# time.struct_time(tm_year=2025, tm_mon=7, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=203, tm_isdst=-1)
2.1.3 程序计时与延迟
  1. time.pref_counter()
  • 功能:精确计时(性能测试)
  • 示例
start = time.perf_counter()time.sleep(2)end = time.perf_counter()print(f\"执行耗时:{end - start:.4f}秒\")# 输出:# 执行耗时:2.0003秒
  1. time.sleep()
  • 功能:程序暂停
  • 示例
start = int(time.time())time.sleep(2)end = int(time.time())print(f\"停顿{end - start:.2f}秒\")# 输出:# 停顿2.00秒
2.1.4 时间转换
  1. 时间戳 -> struct_time
  • 方法:time.localtime()
  • 示例
timestamp = time.time()ts_to_struct = time.localtime(timestamp)print(ts_to_struct)# 输出:# time.struct_time(tm_year=2025, tm_mon=7, tm_mday=22, tm_hour=13, tm_min=50, tm_sec=49, tm_wday=1, tm_yday=203, tm_isdst=0)
  1. struct_time -> 时间戳
  • 方法:time.mktime()
  • 示例
struct_time = time.localtime()struct_to_ts = time.mktime(struct_time)print(struct_to_ts)# 输出:# 1753163493.0

2.2 random

生成随机数和实现随机选择功能

概览
方法 功能 示例 random() [0.0, 1.0) 的随机浮点数 0.374501 uniform(a, b) [a, b] 的随机浮点数 7.823 randint(a, b) [a, b] 的随机整数 4 randrange(start, stop, step) 指定范围的随机整数 45 choice(seq) 序列中的随机元素 “green” choices(population, k) 有放回抽样 [‘B’, ‘C’] sample(population, k) 无放回抽样 [3, 1, 5] shuffle(seq) 原地打乱序列 [‘K’, ‘A’, ‘J’, ‘Q’] gauss(mu, sigma) 高斯分布随机数 0.735 seed(a) 初始化随机种子 固定随机序列 getstate() / setstate() 保存/恢复状态 重现随机序列
2.2.1 基本随机数
  1. random.random()
  • 功能:生成 [0.0, 1.0) 之间的随机浮点数。
  • 示例
    import randomprint(random.random()) # 输出:0.374501(随机值)

控制小数位数

  1. 内置函数/四舍五入
    round(random.random(), 3) # 默认 3 位小数
  2. 格式化
    formatted = f{random.random():.3f} # 默认 3 位小数
  1. random.uniform(a, b)
  • 功能:生成 [a, b] 之间的随机浮点数。
  • 示例
    print(random.uniform(2, 10)) # 输出:7.342(随机浮点数)

2.2.2 随机整数
  1. random.randint(a, b)
  • 功能:生成 [a, b] 之间的随机整数(包含两端)。
  • 示例
    print(random.randint(1, 10)) # 输出:3
  1. random.randrange(start, stop, step)
  • 功能:从 range(start, stop, step) 中随机选择一个整数 [start, stop) 左开右闭
  • 示例
    print(random.randrange(0, 100, 5)) # 输出:45(0,5,10,...,95 中的随机数)

2.2.3 序列操作
  1. random.choice(seq)
  • 功能:从非空序列中随机选择一个元素。
  • 示例
    colors = [\'red\', \'green\', \'blue\']print(random.choice(colors)) # 输出:\'green\'(随机颜色)
  1. random.choices(population, weights=None, k=1)
  • 功能:从序列中有放回地随机抽取 k 个元素(可设置权重)。
  • 示例
    result = random.choices([\'A\', \'B\', \'C\'], weights=[0.2, 0.5, 0.3], k=2)print(result) # 输出:[\'B\', \'C\'](权重越高越可能被选中)
  1. random.sample(population, k)
  • 功能:从序列中无放回地随机抽取 k 个唯一元素。
  • 示例
    numbers = [1, 2, 3, 4, 5]print(random.sample(numbers, 3)) # 输出:[3, 1, 5](随机不重复的3个数)
  1. random.shuffle(seq)
  • 功能:将序列原地随机打乱(修改原序列)。
  • 示例
    cards = [\'A\', \'K\', \'Q\', \'J\']random.shuffle(cards)print(cards) # 输出:[\'K\', \'A\', \'J\', \'Q\'](顺序随机)

2.2.4 概率分布
  1. random.gauss(mu, sigma)
  • 功能:生成高斯分布(正态分布)的随机数,mu 为均值,sigma 为标准差。
  • 示例
    print(random.gauss(0, 1)) # 输出:0.735(标准正态分布中的随机值)
  1. random.expovariate(lambd)
  • 功能:生成指数分布的随机数,lambd 是事件发生率的倒数。
  • 用途: 多用于建模随机事件之间的时间间隔,尤其适合那些平均间隔已知但具体时间不确定的场景。
  • 示例
    print(random.expovariate(1.0/5)) # 输出:3.2(模拟平均每5秒发生一次的事件间隔)

2.2.5 随机种子
  1. random.seed(a=None)
  • 功能:初始化随机数生成器,相同种子生成相同随机序列(用于可重复性)。
  • 示例
    random.seed(42) # 固定种子print(random.random()) # 输出:0.6394(每次运行结果相同)

2.2.6 状态管理
  1. random.getstate()random.setstate(state)
  • 功能:保存/恢复随机数生成器的内部状态。
  • 原理: 这是伪随机数生成器的典型行为,用于保证生成的随机数序列具有不可预测性和多样性
  • 示例
    state = random.getstate() # 保存当前状态print(random.random()) # 随机数1random.setstate(state) # 恢复状态print(random.random()) # 再次输出相同的随机数1

2.3 os

操作系统交互

概览
方法 功能 备注 mkdir() 创建单级目录 存在时创建的目录会报错 makedirs() 创建多级目录 exist_ok = True 已存在创建的目录不会报错 rename() 重命名 remove() 删除文件 scandir() 目录遍历 walk() 递归遍历目录 os.path.join() 路径拼接 os.path.dirname() 、os.path.basename()、os.path.splitext() 路径分解 os.path.exists、os.path.isfile()、os.path.isdir() 路径检查 os.getcwd() 获取当前路径 os.chdir() 修改工作目录 os.environ.get() 获取环境变量 os.system() 执行系统命令
2.3.1 文件与目录操作
  1. 创建目录
  • 方法os.mkdir() / os.makedirs()
  • 示例
import osos.mkdir(\"1\") # 创建单级目录 | 文件已存在会报错os.makedirs(\"test/1\", exist_ok=True) # 创建多级目录,exist_ok=True,当文件已存在时不报错
  1. 文件操作
  • 方法os.rename() / os.remove()
  • 示例
import osos.rename(\"old.txt\",\"new.txt\") # 重命名os.remove(\"test/1.txt\") # 删除文件
  1. 目录遍历
  • 方法os.scandir()
  • 示例
import osfor entry in os.scandir(\".\"): # . 遍历当前目录下的所有 文件 和 子目录 if entry.is_file():print(\"文件:\",entry)# 输出:# 文件: 
2.3.2 路径处理
  1. 路径分解
  • 方法os.path.dirname() | os.path.basename() | os.path.splitext()
  • 示例
import ospath = \"/home/user/documents/report.txt\"# 获取路径组成部分dir_path = os.path.dirname(path) # 目录路径: \"/home/user/documents\"file_name = os.path.basename(path) # 完整文件名: \"report.txt\"file_root, file_ext = os.path.splitext(file_name) # 分离主名和扩展名: (\"report\", \".txt\")# 完整路径拆分head, tail = os.path.split(path) # (\"/home/user/documents\", \"report.txt\")
  1. 路径拼接
  • 方法os.path.join()
  • 示例
full_path = os.path.join(\"dir\",\"subdir\",\"file.txt\")
  1. 路径检查
  • 方法os.path.exists() | os.path.isfile() | os.path.isdir()
  • 示例
print(os.path.exists(\"1.txt\")) # 是否存在print(os.path.isfile(\"1.txt\")) # 是否是文件print(os.path.isdir(\"1.txt\")) # 是否是目录# 输出答案(根据个人本地要查询的文件为主)# True# True# False
2.3.3 系统信息与环境
  1. os.getcwd()
  • 功能:获取当前工作目录
  • 示例
 cwd = os.getcwd()
  1. os.chdir()
  • 功能:修改工作目录
  • 示例
 cwd = os.chdir(\"/new/path\")
  1. os.environ.get()
  • 功能:获取环境变量
  • 示例
home_dir = os.enciron.get(\"HOME\",\"default\") # 查找 HOME 值,没有则返回默认值 defaultprint(home_dir)
  1. os.system()
  • 功能:执行系统命令
  • 示例
os.system(\"ls -l\")

2.4 sys

系统相关功能

概览
方法 功能 备注 sys.argv 获取命令行参数 sys.stdout 重定向输出 sys.stdin.readline().strip() 读取标准输入 sys.version 获取Python版本信息 sys.path 获取模块搜索路径 sys.exit(1) 退出程序并返回状态码 非0状态码表示异常退出 sys.stdout.flush() 刷新输出缓冲区 确保立即显示
2.4.1 命令行参数处理
  1. sys.argv
  • 功能:获取命令行参数
  • 示例
# 假设执行:python scripts.py arg1 arg2 --option=valueprint(sys.argv) # [\'script.py\', \'arg1\', \'arg2\', \'--option=value\']# 实际应用:处理命令行选项if len()sys.argv) > 1:action = sys.argv[1] # arg1if action == \"start\":print(\"\")elif action == \"stop\":print(\"\")
2.4.2 标准输入/输出控制
  1. sys.stdout
  • 功能:重定向输出
  • 示例
with open(\'1.txt\',\'w\',encoding=\"utf-8-sig\") as f:sys.stdout = f # 重定向标准输出到文件print(\"这条信息将写入文件\")sys.stdout = sys._stdout__ # 恢复标准输出# 会将print中的内容写进 1.txt文件内
  1. sys.stdin.readline().strip()
  • 功能:读取标准输入
  • 示例
print(\"请输入内容:\")user_input = sys.stdin.readline().strip()print(f\"您输入了:{user_input}\")# 输出:\"\"\"请输入内容:1 2 3 您输入了:1 2 3\"\"\"
2.4.3 系统信息与配置
  1. sys.version
  • 功能:获取Python版本信息
  • 示例
print(sys.version)# 输出\"\"\"3.11.9 (tags/v3.11.9:de54cf5, Apr 2 2024, 10:12:12) [MSC v.1938 64 bit (AMD64)]\"\"\"
  1. sys.path
  • 功能:获取模块搜索路径
  • 示例
print(sys.path) # 输出列表形式,包含Python查找模块的路径
  1. sys.platform
  • 功能:获取操作系统平台
  • 示例
print(sys.platform) # \'win32\', \'linux\', \'darwin\' (macOS)# 输出 \"\"\"win32\"\"\"
2.4.4 程序流程控制
  1. sys.exit(n)
  • 功能:退出程序并返回状态码(n=0时,正常退出;n=1《或是其它数字》时表示异常退出)
  • 场景:通常用于脚本或程序中发生错误时提前退出,表示异常终止
  • 示例
if error_occurred:sys.exit(1) # 非0状态码表示异常退出
  1. sys.stdout.flush()
print(\"处理中...\", end=\"\")sys.stdout.flush()# 执行耗时操作...print(\"完成!\")

2.5 json

JSON 数据处理

概览
方法 功能 json.dumps() Python -> JSON字符串 json.loads() JSON字符串 -> Python json.dump 写入JSON文件 json.load() 读取JSON文件
2.5.1 基本序列化与反序列化
  1. Python -> JSON字符串
  • 方法json.dumps()
  • 示例
import jsondata = {\"name\": \"Alice\",\"age\": 30,\"hobbies\": [\"reading\"],\"is_student\": False,}json_str = json.dumps(data, indent=2)print(json_str)# 输出:\"\"\"{ \"name\": \"Alice\", \"age\": 30, \"hobbies\": [ \"reading\", \"hiking\" ], \"is_student\": false}\"\"\"
  1. JSON字符串 -> Python
  • 方法json.loads()
  • 示例
restored_data = json.loads(json_str)print(restored_data[\"name\"]) # \"Alice\"
2.5.2 文件读写操作
  1. json.dump()
  • 功能:写入JSON文件
  • 示例
with open(\"data.json\", \"w\") as f:json.dump(data, f, indent=4) # 控制为 4 缩进空格
  1. json.load()
  • 功能:读取JSON文件
  • 示例
with open(\"data.json\") as f:loaded_data = json.load(f)
2.5.3 高级序列化控制
# 处理自定义对象class User: def __init__(self, name, age): self.name = name self.age = age # 自定义序列化方法def user_encoder(obj): if isinstance(obj, User): # 判断 obj 是否是 User 的实例 return {\"name\": obj.name, \"age\": obj.age} raise TypeError(f\"Object of type {obj.__class__.__name__} is not JSON serializable\")user = User(\"Bob\", 40)user_json = json.dumps(user, default=user_encoder) # {\"name\": \"Bob\", \"age\": 40}# 自定义反序列化方法def user_decoder(dct): if \"name\" in dct and \"age\" in dct: return User(dct[\"name\"], dct[\"age\"]) return dctrestored_user = json.loads(user_json, object_hook=user_decoder)print(restored_user.name) # \"Bob\"```