【Python】常用内置模块
一、time模块
内置模块需要导包
时间戳
学习时间相关的模块前,了解三个概念。时间戳(毫秒为单位),结构化时间,字 符串形式的时间:
time模块常用操作方法
直接获取时间格式时间
# ---- 时间戳格式 ----
time.time() 从Unix诞生日开始算,距离至今经历多少秒(1970.1.1 8:00开始 计算)
import time
print(time.time())
直接获取结构化格式时间
# ---- 结构化格式 ----
time.localtime() 显示本地时间(中国为东八区,上海时间)# 如果未指定参数seconds,则默认放入time.time()
import time
print(time.localtime())
time.gmtime() 显示世界UTC时间(与本地时间差8h)# 如果未指定参数seconds,则默认放入time.time()
import time
print(time.gmtime())
?# ---- 结构化时间其他玩法 ----
print(time.localtime().tm_year) # 只拿到年份 2020
# ---- 字符串格式 ----
print(time.asctime())
print(time.ctime())
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 相当于 : %Y-%m-%d %X
执行结果:
Tue May 26 00:36:11 2020
Tue May 26 00:36:11 2020
2020-05-26 00:36:11
?
直接获取字符串格式时间
time.strftime() 显示一个按照指定格式格式化好的本地时间
import time
print(time.strftime("%Y-%m-%d %X")
time.asctime() 显示一个格式化好的本地时间,该格式时间为Linux系统采用
import time
print(time.asctime())
time.ctime() 显示一个格式化好的世界时间,该格式时间为Linux系统采用
import time
print(time.ctime())
转换方法
time.mktime() 放入一个结构化时间,可以转换为时间戳形式
time.strftime()
放入一个结构化时间,可以按照指定格式转换为字符串形式
可选参数格式 (%Y-%m-%d %H:%M:%S` 或者 %Y-%m-%d %X ),注意可以加入%p代表 时间,上午或者下午
# ==============转换相关=======================
# --- 结构化时间转时间戳 ---
print(time.mktime(time.localtime())) # 1590424571.0# --- 结构化时间转字符串 ---
print(time.strftime("%Y-%m-%d %X",time.gmtime())) # 如不指定
time.strftime()的参数。默认为localtime() Tue May 26 00:36:11 2020# --- 字符串格式转结构化 ---
print(time.strptime(time.ctime())) # 默认转换格式是%a %b %d %H:%M:%S
%Y。刚好可以放ctime或者asctime,因为ctime和asctime支持该种格式。
res = time.strftime("%Y-%m-%d %X")
print(time.strptime(res,"%Y-%m-%d %X")) # 如果放入的是其他格式的字符串
时间,则需要按原定格式转回,相当于strftime的逆操作。
执行结果:
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=26, tm_hour=0,
tm_min=36, tm_sec=11, tm_wday=1, tm_yday=147, tm_isdst=-1)
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=26, tm_hour=0,
tm_min=36, tm_sec=11, tm_wday=1, tm_yday=147, tm_isdst=-1)
?# --- 时间戳转本地结构化 ---
print(time.localtime(333333))
#输出:
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=5, tm_hour=4,
tm_min=35, tm_sec=33, tm_wday=0, tm_yday=5, tm_isdst=0)# --- 时间戳转UTC时间结构化 ---
print(time.gmtime(333333))
# 输出:
# time.struct_time(tm_year=1970, tm_mon=1, tm_mday=4, tm_hour=20,
tm_min=35, tm_sec=33, tm_wday=6, tm_yday=4, tm_isdst=0)# --- 时间戳转固定的UTC时间字符串格式 ---
print(time.ctime(00))
# Thu Jan 1 08:00:00 1970
print(time.asctime(1)) 注意。无法时间戳转本地字符串格式时间
#Traceback (most recent call last):
File "D:\PycharmProjects\python39_Project\module\time_test.py",
line 44, in <module>
print(time.asctime(1))
TypeError: Tuple or struct_time argument required# --- 时间戳转本地时间字符串格式 --- 重点!
t = time.time()
struct_lo = time.localtime(t) # 先转为本地结构化时间
res = time.strftime("%Y-%m-%d %X",struct_lo) # 将本地结构化时间转为字
符串格式时间
print(res) # 2020-05-26 00:36:11# --- 时间戳转UTC时间字符串格式 --- 重点!
t = time.time()
struct_gm = time.gmtime(t)
res = time.strftime("%Y-%m-%d %X",struct_gm)
print(res) # 2020-05-25 16:36:11# --- 字符串格式转时间戳 --- 重点!
str_time = "1998-01-26 00:00:10"
struct_lo = time.strptime(str_time,"%Y-%m-%d %X") # 先转为本地结构化
时间
res = time.mktime(struct_lo) # 将本地结构化时间转为时间戳格式
print(res) # 885744010.0# 总结 #
"""
字符串与时间戳的转换
字符串 ----> 结构化时间(指定是UTC时间还是本地时间) ---> 时间戳
"""
time模块中实现时间的加减
import time
to_day_time = time.time()
sum_7day_time = to_day_time+7*86400 #七天后的时间 = 天数 乘以 每天的秒数总和sub_3day_time = to_day_time-3*86400 #三天前的时间
str_to_day_time = time.strftime("%Y-%m-%d %X",time.localtime(to_day_time))
str_sum_7day_time = time.strftime("%Y-%m-%d %X",time.localtime(sum_7day_time))
str_sub_3day_time = time.strftime("%Y-%m-%d %X",time.localtime(sub_3day_time))
print(str_to_day_time) # 2020-05-26 00:57:33 当前时间
print(str_sum_7day_time) # 2020-06-02 00:57:33 七天后的时间
print(str_sub_3day_time) # 2020-05-23 00:57:33 三天前的时间
扩展:结构化时间详解
import time
print(time.localtime())
"""
本地时间参数详解:
time.struct_time(tm_year=2020, tm_mon=5, tm_mday=26, tm_hour=0,
tm_min=47, tm_sec=0, tm_wday=1, tm_yday=147, tm_isdst=0)
tm_year : 年
tm_mon : 月
tm_mday : 日
tm_ hour : 时
tm_min : 分
tm_sec : 秒
tm_wday : 星期几(从0开始计算,星期一是0,星期二是1,以此类推)
tm_yday : 该年份中第多少天
tm_isdst : 夏令时时间
"""
?
time练习
使用time模块,将对字典的增删改查操作的成功与否写进文本文件中:
num_dict = {'name': 'Lisa', "age": '18'}
def creat_event(k, v):
num_dict.update({k: v})
if k:
return f"请输入您想添加的字段名[{k}]的数据[{v}]成功!"
else:
return f"请输入您想添加的字段名[{k}]的数据[{v}]失败!"
def delete_event(k):
num_dict.pop(k)
if k:
return f"请输入您想删除的字段名[{k}]成功!"
else:
return f"请输入您想删除的字段名[{k}]失败!"
def modify_event(k, v):
num_dict.update({k: v})
if k:
return f"请输入您想修改的字段名[{k}]的数据[{v}]成功!"
else:
return f"请输入您想修改的字段名{k}的数据{v}失败!"
def look_event(k):
num_dict.items()
if k:
return f"请输入您想查看的字段名[{k}]成功!"
else:
return f"请输入您想查看的字段名[{k}]失败!"
def write_log(msg):
message_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
message = f"[{message_time}] [localhost] [info] [message:{msg}]"
with open("message.log", "a+", encoding="utf-8") as fw:
fw.write(message + "\n")
def main():
menu = '''
--------欢迎来到本系统--------
1、增加数据
2、删除数据
3、修改数据
4、查询数据
'''
while True:
print(menu)
user_input = input("请输入您想操作的序号:")
if user_input == "1":
support_key = list(num_dict.keys())
print("当前系统所支持的字段名", support_key)
k = input("请输入您想添加数据的字段名:")
v = input(f"请输入您想添加的字段名{k}的数据:")
msg = creat_event(k, v)
print(num_dict)
write_log(msg)
elif user_input == "2":
support_key = list(num_dict.keys())
print("当前系统所支持的字段名", support_key)
k = input("请输入您想删除数据的字段名:")
msg = delete_event(k)
print(num_dict)
write_log(msg)
elif user_input == "3":
support_key = list(num_dict.keys())
print("当前系统所支持的字段名", support_key)
k = input("请输入您想修改的数据的字段名:")
v = input(f"请输入您想修改的字段名{k}的数据:")
msg = modify_event(k, v)
print(num_dict)
write_log(msg)
elif user_input == "4":
support_key = list(num_dict.keys())
print("当前系统所支持的字段名", support_key)
k = input("请输入您想查看的数据的字段名:")
msg = look_event(k)
print(num_dict)
write_log(msg)
else:
print("您输入的不是正确的序号!")
main()
二、datetime模块常用操作方法
直接获取字符串格式时间
datetime.now() 返回一个固定格式的本地字符串格式化时间。%Y-%m-%d %X
datetime.utcnow() 返回一个固定格式的UTC字符串格式化时间
时间转换
date.fromtimestamp() 放入一个时间戳格式的时间,直接转换为字符串格式时间。(如:time.time())
时间加减
datetime.timedelta() 为一个字符串格式的时间加减时间
时间替换
datetime对象.replace() 替换一个字符串格式的时间中某部分
三、random模块
random模块可用于生成随机数
random模块常用操作方法
生成1个整数
random.randint(1,3) 生成1,2,3中随机一个整数(顾头顾尾)
random.randrange(1,3) 生成1,2中随机一个整数(顾头不顾尾)生成1个小数
random.random() 大于0且小于1的小数
random.uniform(1,3) 大于1且小于3的小数列表随机取元素
random.choice([1,"a","b"]) 随机取一个元素
random.sample([1,"a","b"],2) 随机取两个元素,由参数指定随机打乱顺序
random.shuffle([1,2,3,4,5]) 随机打乱顺序
演示
import random
print(random.random()) # (0,1)----float 大于0且小于1之间的小数
0.25697226355807967
print(random.randint(1, 3)) # [1,3] 大于等于1且小于等于3之间的整数
3
print(random.randrange(1, 3)) # [1,3) 大于等于1且小于3之间的整数 2
print(random.choice([1, '23', [4, 5]])) # 1或者23或者[4,5] 结果是:
23
print(random.sample([1, '23', [4, 5]], 2)) # 列表元素任意2个组合
[[4, 5], 1]
print(random.uniform(1, 3)) # 大于1小于3的小数,如2.3551911687118054
item = [1, 3, 5, 7, 9]
random.shuffle(item) # 打乱item的顺序,相当于"洗牌"
print(item) # [1, 5, 3, 9, 7]
?
random练习
和计算机玩猜大小,猜拳,判断谁赢
import random
def random_text():
while True:
compuer_guess = random.randint(1, 3)
user_input = int(input("请输入你猜的数:"))
if compuer_guess == user_input:
print("恭喜你!你猜对了!")
print(compuer_guess)
break
elif compuer_guess != user_input:
print("你猜错了!")
print(compuer_guess)
else:
print("你输入的不是数字!")
random_text()
import random
def random_text2():
while True:
compuer_guess = random.choice(["剪刀", "石头", "布"])
user_input = input("请输入你出的手势:")
if compuer_guess == "剪刀" and user_input == "石头":
print("恭喜你!你赢了!")
print(compuer_guess)
break
elif compuer_guess == "剪刀" and user_input == "布":
print("哎呀!你输了哦!")
print(compuer_guess)
elif compuer_guess == "剪刀" and user_input == "剪刀":
print("你们是平局哦!")
print(compuer_guess)
elif compuer_guess == "石头" and user_input == "石头":
print("你们是平局哦!")
print(compuer_guess)
elif compuer_guess == "石头" and user_input == "剪刀":
print("哎呀!你输了哦!")
print(compuer_guess)
elif compuer_guess == "石头" and user_input == "布":
print("恭喜你!你赢了!")
print(compuer_guess)
break
elif compuer_guess == "布" and user_input == "布":
print("你们是平局哦!")
print(compuer_guess)
elif compuer_guess == "布" and user_input == "剪刀":
print("恭喜你!你赢了!")
print(compuer_guess)
break
elif compuer_guess == "布" and user_input == "石头":
print("哎呀!你输了哦!")
print(compuer_guess)
else:
print("你输入的不是剪刀,石头,布")
random_text2()