20. 内置模块
一、random模块
random 模块用来创建随机数的模块。
random.random() # 随机生成一个大于0且小于1之间的小数
random.randint(a, b) # 随机生成一个大于等于a小于等于b的随机整数
random.uniform(a, b) # 随机生成一个大于等于a小于等于b的随机浮点数
random.choice(seq) # 随机选择一个seq序列中的成员
random.sample(population, k, *, counts=None) # 随机选择多个成员
random.shuffle(x) # 将序列顺序随机打乱
import random
result = random.random() # 随机生成一个大于0且小于1之间的小数
print("result: ",result)
result = random.randint(10,20) # 随机生成一个大于等于a小于等于b的随机整数
print("result: ",result)
result = random.uniform(10,20) # 随机生成一个大于等于a小于等于b的随机浮点数
print("result: %f" %result)
result = random.choice([11,22,33,44,55]) # 随机选择一个seq序列中的成员
print(f"result: {result}")
result = random.sample([11,22,33,44,55],3) # 随机选择多个成员
print(f"result: {result}")
num_list = [11,22,33,44,55]
random.shuffle(num_list) # 将序列顺序随机打乱
print("result: {}".format(num_list))
二、hashlib模块
hashlib 模块可以用来实现加密。
hashlib.md5(str) # 用于实现MD5加密
import hashlib
data = "Sakura"
obj = hashlib.md5("小樱".encode("utf-8")) # 加盐
obj.update(data.encode("utf-8"))
result = obj.hexdigest()
print(result) # 密文
三、json模块
json 本质上是一个特定结构的字符串,它用于打通不同编程语言之间相互进行通信时的数据格式问题。Python 中默认转换为 json 的类型有 字符串、数值类型、列表、元组、字典、布尔值 和 None。其中,元组转换为 json 类型 () 会变为 [],None 转换为 json 会变为 null,Flase 和 True 转换为 json 会变为 flase 和 true。
- 序列化:将 Python 数据类型转换为 JSON 格式字符串
- 反序列化:将 JSON 格式字符串转换为 Python 数据类型
json.dumps(obj) # 得到json格式的字符串
json.loads(obj) # json格式的字符串转换为字典
json.dump(obj,fp) # 将json格式的字符串写入到文件
json.load(obj,fp) # 将文件中的json格式的字符串转换为字典
import json
info = {"name":"小樱","age":10}
data_json = json.dumps(info,ensure_ascii=False,indent=4) # 序列化
print(data_json)
print(type(data_json))
data_dict = json.loads(data_json) # 反序列化
print(data_dict)
print(type(data_dict))
import json
info = {"name":"小樱","age":10}
with open("info.json",mode="w",encoding="utf-8") as f:
json.dump(info,f,ensure_ascii=False)
with open("info.json",mode="r",encoding="utf-8") as f:
data_dict = json.load(f)
print(data_dict)
如果我们传入其它的对象类型,可能会转换 json 格式出错,此时,我们可以显示的转换为字符串类型来解决这个问题。
import json
from datetime import date
data_list = [
{"name":"Sakura","age":10,"birth":date(1986,1,1).strftime("%Y-%m-%d")},
{"name":"Mikoto","age":14,"brith":date(1995,5,2).strftime("%Y-%m-%d")}
]
jsoon_data = json.dumps(data_list,ensure_ascii=False)
print(jsoon_data)
我们也可以自定义类继承 JSONEncoder 类来实现序列化。
import json
from json import JSONEncoder
from datetime import date
data_list = [
{"name":"Sakura","age":10,"birth":date(1986,1,1)},
{"name":"Mikoto","age":14,"brith":date(1995,5,2)}
]
class MyJSONEncoder(JSONEncoder):
def default(self, o):
# 判断o的类型
if type(o) == date:
return o.strftime("%Y-%m-%d")
return super().default(o)
jsoon_data = json.dumps(data_list,ensure_ascii=False,cls=MyJSONEncoder)
print(jsoon_data)
四、time模块与datetime模块
time.time() # 获取时间戳
time.sleep(secs) # 睡眠secs秒
datetime.datetime.now() # 获取当前时间
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) # 运算加减指定时间
import time
t1 = time.time()
print(t1)
time.sleep(1)
t2 = time.time()
print(t2-t1)
import datetime
day1 = datetime.datetime.now()
print(day1)
day2 = day1 + datetime.timedelta(days=3)
print(day2)
day3 = day1 + datetime.timedelta(weeks=-1)
print(day3)
【1】字符串 --> datetime 类型
from datetime import datetime
text = "1986-04-01"
date = datetime.strptime(text,"%Y-%m-%d")
print(date)
print(type(date))
【2】、datetime 类型 --> 字符串
from datetime import datetime
date = datetime.now()
str = date.strftime("%Y-%m-%d")
print(str)
print(type(str))
【3】、时间戳 --> datetime 类型
import time
from datetime import datetime
t1 = time.time()
date = datetime.fromtimestamp(t1)
print(date)
print(type(date))
【4】、datetime 类型 --> 时间戳
from datetime import datetime
date = datetime.now()
t1 = date.timestamp()
print(t1)
print(type(t1))