九 补充模块
9.1 time模块
1.睡眠 - sleep(时间)
2.获取当前时间 - time()
时间戳 - 通过时间差来表示具体的时间(指定时间到1970年1月1日0时0分0秒(格林威时间)(单位:秒)
时间戳保存时间的优点:1)节约内存 2)方便加密
t1 = time.time()
print(t1) #1661476364.9644117
3.获取本地当前时间
localtime() - 获取当前时间(结构体时间)
localtime(时间戳) - 将指定时间戳转换成本地时间对应结构体时间
t2 = time.localtime()
print(t2) #time.struct_time(tm_year=2022, tm_mon=8, tm_mday=26, tm_hour=19, tm_min=13, tm_sec=8, tm_wday=4, tm_yday=238, tm_isdst=0)
可以单独提取
print(t2.tm_year,t2.tm_mon,t2.tm_mday) #2022 8 26
t3 = time.localtime(0)
print(t3) #time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
t4 = time.localtime(1661476364.9644117)
print(t4) #time.struct_time(tm_year=2022, tm_mon=8, tm_mday=26, tm_hour=9, tm_min=12, tm_sec=44, tm_wday=4, tm_yday=238, tm_isdst=0)
print(f'{t4.tm_year}年{t4.tm_mon}月{t4.tm_mday}日') #2022年8月26日
4.将结构体时间转换成时间戳 - mktime(结构体时间)
result = time.mktime(t3)
print(result) #0.0
5.时间字符串和结构体时间之间的相互转换
1)结构体时间转换成字符串 - strftime(时间格式,结构体时间)
% Y - 年
% m - 月
% d - 日
% H - 时(24小时)
% M - 分
% S - 秒
% z
% a - 缩小星期几
% A - 全写星期几
% b - 简称月名
% B - 全称月名
% c - 星期几 几月 几号 时间
% I - 12小时制
% p - 上午、下午
# 'xxx年xx月xx日'
result = time.strftime('%Y年%m月%d日')
print(result)
# 星期 xx:xx
result = time.strftime('%a %H:%M',t4)
print(result) #Fri 09:12
# 上午 xx:xx 下午 xx:xx
result = time.strftime('%p %H:%M',t4)
print(result) #AM 09:12
2)字符串时间转换成结构体时间
# '2021/3/4'
result = time.strptime('2021/3/4','%Y/%m/%d')
print(result)
result = time.strptime('2022-5-10 19:30', '%Y-%m-%d %H:%M')
print(result)
9.2 datetime模块
from datetime import datetime, timedelta
from time import localtime
1.datetime类
1)获取当前时间
t1 = datetime.today()
print(t1, type(t1))
t2 = datetime.now()
print(t2)
2)根据时间值创建时间对象
t3 = datetime(2020, 12, 5)
print(t3) # 2020-12-05 00:00:00
t4 = datetime(2022, 3, 4, 12, 50, 30)
print(t4)
3)根据时间字符串创建时间对象
t5 = datetime.strptime('2021/3/5', '%Y/%m/%d')
print(t5) # 2021-03-05 00:00:00
4)单独获取具体的时间信息
print(t5.year)
print(t5.month)
print(t5.day)
print(t5.hour)
print(t5.minute)
print(t5.second)
print(t5.weekday()) # 星期值的取值范围:0~6,0表示星期1
5)将时间对象转换成字符串时间
# xxxx年xx月xx日
result = t4.strftime('%Y年%m月%d日')
print(result) # 2022年03月04日
6)求时间差: 时间对象1 - 时间对象2 - 返回时间间隔对象(通过时间间隔对象可以单独获取间隔时间的完整天数和秒数)
t1 = datetime(2022, 5, 3, 9, 10)
t2 = datetime(2022, 10, 1, 10, 5)
result = t2 - t1
print(result, type(result)) # 151 days, 0:55:00
print(result.days) # 151
print(result.seconds) # 3300
7)时间对象转换成结构体
result = t1.timetuple()
print(result) # time.struct_time(tm_year=2022, tm_mon=5, tm_mday=3, tm_hour=9, tm_min=10, tm_sec=0, tm_wday=1, tm_yday=123, tm_isdst=-1)
8)时间对象转时间戳
result = t1.timestamp()
print(result)
print(localtime(result))
2.timedelta - 时间间隔类
t1 = datetime(2022, 10, 1, 10, 8, 30)
print(t1) # 2022-10-01 10:08:30
# 10天以后对应的时间
result = t1 + timedelta(days=10)
print(result) # 2022-10-11 10:08:30
# 32天前对应的时间
result = t1 - timedelta(days=30)
print(result)
# 30分钟以后
result = t1 + timedelta(minutes=30)
print(result)
# 5天6小之前
result = t1 - timedelta(days=5, hours=6)
print(result)
# 3周以后
result = t1 + timedelta(weeks=3)
print(result)
9.3 random模块
from random import randint, random, randrange, sample, choice, choices, shuffle
1.随机小数:random
random() - 产生0到1的随机小数
print(random())
# 产生0~20之间的随机小数
# 0*20~1*20 -> 0 ~ 20
print(random()*20)
# 产生5~30之间的随机小数
# 0*25~1*25 -> 0+5 ~ 25+5 -> 5 ~ 30
print(random()*25+5)
# 控制小数的小数位数(四舍五入):round(小数, 需要保留的小数位数)
print(round(3.1415926, 2)) # 3.14
2.随机获取指定等差数列中的一个数字:randrange(起始值,终止值,步长)
print(range(1, 10, 2)) # 1, 3, 5, 7, 9
print(randrange(1, 10, 2))
3.sample(序列, 个数) - 随机获取指定序列中指定个数个元素,产生一个新的列表(无放回抽样)
result = sample([10, 34, 78, 90], 3)
print(result)
result = sample('abcd', 1)
print(result)
4.choice(序列) - 随机获取一个元素
result = choice([10, 34, 78, 90])
print(result)
5.choices(序列,权重,求和权重,数量) - 有放回抽样
result = choices([10, 34, 78, 90], k=3)
print(result)
# 权重列表中的数字代表对应选项的份数
result = choices(['1000万', '10000', '100', '0'], [1, 2, 100, 200], k=2)
print(result)
6.洗牌 - shuffle(列表)
nums = [10, 34, 78, 90]
shuffle(nums)
print(nums)