在 Python 开发中,数据处理、时间操作和随机数生成是非常常见的需求。今天就来介绍 json(数据格式处理)、datetime(日期时间操作)和random随机数生成)三个模块
一、json 模块:
json是一种基于文本的轻量级数据交换格式,结构与 Python 字典类似(支持键值对、列表等结构),广泛用于接口数据传输、配置文件存储等场景。
核心操作:序列化与反序列化
- 序列化:将 Python 数据类型(字典、列表等)转换为 JSON 格式字符串
- 反序列化:将 JSON 格式字符串转换为 Python 数据类型
1. 序列化方法
json.dumps(obj):将 Python 对象转换为 JSON 字符串
json.dump(obj, file):将 Python 对象直接写入文件(自动转换为 JSON 格式)
import json
# 定义一个Python字典
data = {
"name": "张三",
"age": 25,
"hobbies": ["篮球", "编程"],
"is_student": False
}
# 转换为JSON字符串(dumps)
json_str = json.dumps(data, ensure_ascii=False, indent=2) # ensure_ascii=False保留中文,indent=2格式化输出
print(json_str)
# 写入文件(dump)
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
2. 反序列化方法
json.loads(json_str):将 JSON 字符串转换为 Python 对象
json.load(file):从文件中读取 JSON 内容并转换为 Python 对象
import json
# 从JSON字符串转换(loads)
json_str = '{"name": "张三", "age": 25, "hobbies": ["篮球", "编程"]}'
data = json.loads(json_str)
print(data["name"]) # 输出:张三
# 从文件读取(load)
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["hobbies"]) # 输出:['篮球', '编程']
二、datetime 模块:日期时间的全方位处理
datetime模块提供了对日期、时间的精细化操作,支持日期构造、属性获取、格式转换等功能,包含三个核心类:date(日期)、time(时间)、datetime(日期 + 时间)。
1. date 类:处理日期(年、月、日)
构造日期
date.today():获取当前日期
date(year, month, day):自定义日期(注意月份和天数需合法,例如月份不能超过 12)
获取属性
year:年份
month:月份
day:日
weekday():星期(0 = 周一,6 = 周日)
from datetime import date
# 获取今天的日期
today = date.today()
print(today) # 输出:2025-07-14(当前日期)
# 自定义日期
birthday = date(2000, 5, 20)
print(birthday.year) # 输出:2000
print(birthday.weekday()) # 输出该日期是周几(0-6)
日期格式化(strftime)
通过strftime(format)将日期转换为指定格式的字符串,常用格式符:
%Y:四位数年份(如 2025)
%y:两位数年份(如 25)
%m:月份(01-12)
%d:日(01-31)
today = date.today()
print(today.strftime("%Y年%m月%d日")) # 输出:2025年07月14日
print(today.strftime("%y-%m-%d")) # 输出:25-07-14
2. time 类:处理时间(时、分、秒)
构造时间
time(hour, minute, second):自定义时间(时、分、秒需在合法范围,例如小时 0-23)
获取属性
hour:小时
minute:分钟
second:秒
时间格式化(strftime)
常用格式符:
%H:24 小时制小时(00-23)
%M:分钟(00-59)
%S:秒(00-59)
from datetime import time
# 自定义时间
t = time(16, 56, 30) # 16时56分30秒
print(t.hour) # 输出:16
# 时间格式化
print(t.strftime("%H:%M:%S")) # 输出:16:56:30
3. datetime 类:日期 + 时间的综合处理
datetime类是date和time的结合,同时包含日期和时间信息,功能更全面。
构造方法
datetime.now():获取当前日期 + 时间
datetime(year, month, day, hour, minute, second):自定义日期时间
关键功能
属性获取:同时支持year/month/day(日期)和hour/minute/second(时间)
字符串转 datetime:datetime.strptime(str, format)(通过指定格式解析字符串)
格式化输出:支持strftime(与 date、time 用法一致)
from datetime import datetime
# 获取当前时间
now = datetime.now()
print(now) # 输出:2025-07-14 10:30:00(当前具体时间)
# 自定义日期时间
dt = datetime(2025, 10, 1, 8, 0, 0) # 2025年10月1日8点0分0秒
print(dt.month) # 输出:10
print(dt.hour) # 输出:8
# 字符串转datetime(strptime)
time_str = "2025-12-25 18:30:00"
dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print(dt.weekday()) # 输出该日期是周几
# 格式化输出
print(dt.strftime("%Y年%m月%d日 %H时%M分")) # 输出:2025年12月25日 18时30分
三、random 模块:随机数与随机选择
random模块用于生成随机数、随机选择元素等,在抽奖、模拟数据、随机排序等场景中非常实用。
核心方法
random() 生成 [0, 1) 之间的随机浮点数
randint(a, b) 生成 [a, b] 之间的随机整数(包含 a 和 b)
choice(seq) 从序列(列表、元组等)中随机选择 1 个元素
choices(seq, k=n) 从序列中随机选择 n 个元素(允许重复,即有放回抽样)
sample(seq, k=n) 从序列中随机选择 n 个元素(不允许重复,n≤序列长度,即无放回抽样)
randrange(start, stop, step) 从指定范围(start 到 stop,步长 step)中随机选择一个整数
import random
# 1. 生成随机浮点数
print(random.random()) # 输出:0.783(示例,每次运行结果不同)
# 2. 生成随机整数
print(random.randint(1, 10)) # 输出1-10之间的随机整数
# 3. 随机选择1个元素
fruits = ["苹果", "香蕉", "橙子"]
print(random.choice(fruits)) # 随机输出一个水果
# 4. 随机选择n个元素(可重复)
print(random.choices(fruits, k=2)) # 可能输出:['苹果', '苹果']
# 5. 随机选择n个元素(不重复)
print(random.sample(fruits, k=2)) # 可能输出:['香蕉', '橙子'](无重复)
# 6. 从指定范围选择整数
print(random.randrange(0, 10, 2)) # 从0,2,4,6,8中随机选一个
总结
json:处理跨平台数据交换(如接口 JSON 数据、配置文件)
datetime:处理所有与日期时间相关的操作(如日志时间、倒计时、日程计算)
random:生成随机数据(如随机抽样、验证码、模拟测试数据)
掌握这些模块的核心用法,能极大提升数据处理效率。建议结合实际场景多练习,比如用json
读写配置文件、用datetime
计算两个日期的差值、用random
实现一个简单的抽奖程序,加深理解。