python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python常见模块用法

Python常见模块及其用法示例详解

作者:木子杳衫

模块导入是Python开发中的一个重要环节,但如果不小心,可能会遇到各种错误,这篇文章主要给大家介绍了关于Python常见模块及其用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

1. 什么是模块和包?

# 文件名为hello.py
def func():
	print("hello world!")
func()

使用模块

import hello
mypackage/
│── __init__.py
│── module1.py
│── module2.py
└── subpackage/
    │── __init__.py
    │── module3.py

使用包

from mypackage import module1,module2
from 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()
  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()
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
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 -> 时间戳
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()

控制小数位数

  1. 内置函数/四舍五入
    round(random.random(), 3) # 默认 3 位小数
  2. 格式化
    formatted = f{random.random():.3f} # 默认 3 位小数
  1. random.uniform(a, b)

2.2.2 随机整数

  1. random.randint(a, b)
  1. random.randrange(start, stop, step)

2.2.3 序列操作

  1. random.choice(seq)
  1. random.choices(population, weights=None, k=1)
  1. random.sample(population, k)
  1. random.shuffle(seq)

2.2.4 概率分布

  1. random.gauss(mu, sigma)
  1. random.expovariate(lambd)

2.2.5 随机种子

  1. random.seed(a=None)

2.2.6 状态管理

  1. random.getstate()random.setstate(state)

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. 创建目录
import os
os.mkdir("1") # 创建单级目录 | 文件已存在会报错
os.makedirs("test/1", exist_ok=True) # 创建多级目录,exist_ok=True,当文件已存在时不报错
  1. 文件操作
import os
os.rename("old.txt","new.txt") # 重命名
os.remove("test/1.txt") # 删除文件
  1. 目录遍历
import os
for entry in os.scandir("."): # . 遍历当前目录下的所有 文件 和 子目录 
	if entry.is_file():
		print("文件:",entry)
# 输出:
# 文件: <DirEntry '1.py'>

2.3.2 路径处理

  1. 路径分解
import os

path = "/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. 路径拼接
full_path = os.path.join("dir","subdir","file.txt")
  1. 路径检查
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 值,没有则返回默认值 default
print(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=value
print(sys.argv) # ['script.py', 'arg1', 'arg2', '--option=value']
# 实际应用:处理命令行选项
if len()sys.argv) > 1:
	action = sys.argv[1] # arg1
	if 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
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)
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字符串
import json
data = {
	"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
restored_data = json.loads(json_str)
print(restored_data["name"]) # "Alice"

2.5.2 文件读写操作

  1. json.dump()
with open("data.json", "w") as f:
	json.dump(data, f, indent=4) # 控制为 4 缩进空格
  1. json.load()
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 dct

restored_user = json.loads(user_json, object_hook=user_decoder)
print(restored_user.name)  # "Bob"
```

总结 

到此这篇关于Python常见模块及其用法示例详解的文章就介绍到这了,更多相关Python常见模块用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文