模块其实是将一些公用的功能代码写在一个py文件中,在其它模块中可以随意使用该文件中的代码
导入模块的语法:
import 模块
from 模块 import功能
import time
# 计算程序执行的时间差
start_time = time.time()
for i in range(10000):
print(i)
end_time = time.time()
print(end_time - start_time)
# 控制程序执行频率
while True:
print("hahaha")
time.sleep(1)
# datetime 年月日 时分秒
from datetime import datetime
# 获取系统时间
time = datetime.now()
# 指定一个时间
time = datetime(2022, 4, 21, 12, 12, 12)
# 计算时间差
time1 = datetime(2022, 4, 21, 12, 12, 12)
time2 = datetime(2021, 4, 20, 12, 12, 12)
diff = time1 - time2
print(diff) # 366 days, 0:00:00
print(diff.total_seconds()) # 31622400.0
# 格式化一个时间
t = datetime.now()
t_str = t.strftime("%Y年%m月%d日 %H小时%M分钟%S秒") # 把时间格式化一个字符串
print(t_str)
# 用户输入两个时间,计算时间差
str_time_1 = input("请输入时间(yyyy-mm-dd HH:MM:SS):")
str_time_2 = input("请输入时间(yyyy-mm-dd HH:MM:SS):")
time_1 = datetime.strptime(str_time_1, "%Y-%m-%d %H:%M:%S") # 将字符串转换成时间格式
time_2 = datetime.strptime(str_time_2, "%Y-%m-%d %H:%M:%S")
print(time_1 - time_2)
# date 年月日
from datetime import date
# 获取当前日期
time = date.today()
# 时间格式转换为字符串
str_time = date.strftime(time, "%Y年%m月%d日")
# 指定一个时间
t = date(2089, 9, 1)
专门用来产生随机数的模块
import random
# 所有随机数的根
print(random.random())
# 随机小数
random.uniform(4, 9)
# 随机整数 能够取到边界
random.randint(0, 9)
# 随机的选择一个
lst = ["Baidu", "Google", "Alibaba"]
item = random.choice(lst)
print(item)
# 随机选出两个
print(random.sample(lst, 2))
import random
def rand_int():
return str(random.randint(0, 9))
def rand_upper():
return chr(random.randint(65,90))
def rand_lower():
return chr(random.randint(97, 122))
def random_verify_num(n = 4):
lst = []
for i in range(n):
which = random.randint(1, 3)
if which == 1:
str = rand_int()
elif which == 2:
str = rand_upper()
elif which == 3:
str = rand_lower()
lst.append(str)
return "".join(lst)
ret = random_verify_num()
print(ret)
import pickle
lst = ["Baidu", "Google", "Alibaba"]
# 将对象转换成字节
ret = pickle.dumps(lst)
# 将字节转换成对象
lst = pickle.loads(ret)
# pickle将对象序列化之后存储到文件中
pickle.dump(lst, open("b.txt", mode="wb"))
# pickle读取序列化后的文件反序列化为对象
lst = pickle.load(open("b.txt", mode="rb"))
import json
dic = {
"id": 2,
"name": "周杰伦",
"usertype": "VIP"
}
# 把字典或列表转换成json字符串
str_json = json.dumps(dic, ensure_ascii=False) # json处理中文时要加ensure_ascii=False
print(str_json, type(str_json))
# 前端返回的json字符串转换成字典或列表
dic0 = json.loads(str_json)
print(dic0, type(dic0))
json.dump(dic, open("b.txt", mode="w", encoding="utf-8"), ensure_ascii=False)
json.load(open("b.txt", mode="r", encoding="utf-8"))
MD5是一种不可逆的加密算法,是可靠安全的;引入hashlib的模块就能使用
import hashlib
# 创建MD5对象
obj = hashlib.md5()
# 将需要加密的信息(bytes)传递给MD5对象
obj.update("你好,周杰伦".encode("utf-8"))
# 从obj中获取密文
print(obj.hexdigest())
# 默认的加密过程容易出现撞库的情况
# 解决撞库: 加盐
obj = hashlib.md5(b'sdfghjkertyuicvbn')
obj.update("你好,周杰伦".encode("utf-8"))
print(obj.hexdigest())
# 加密文件
> 可以判断文件的一致性:上传文件时,首先计算文件的md5,使用这个值到数据库中的搜索,如果有相同的md5的值证明已经上传过该文件,且未被修改
f = open("a.txt", mode="rb")
for line in f:
obj.update(line)
print(obj.hexdigest())
封装文件和文件夹的相关操作
# 移动文件
shutil.move("a.txt", "newPicture")
# 复制两个文件句柄
f1 = open("newPicture/a.txt", mode="rb")
f2 = open("picture/b.txt", mode="wb")
shutil.copyfileobj(f1, f2)
# 通过文件路径,复制文件(只能复制文件的内容)
shutil.copyfile("b.txt", "picture/b.txt")
# 通过文件路径,复制文件(文件内容+文件权限都复制)
shutil.copy("newPicture/a.txt", "b.txt")
# 通过文件路径,复制文件(文件内容+修改时间+文件权限都复制)
shutil.copy2("newPicture/a.txt", "b.txt")
# 修改文件时间,复制权限,不复制内容
shutil.copystat("b.txt", "newPicture/a.txt")
# 仅复制权限
shutil.copymode(".", "b.txt")
# 复制文件夹
shutil.copytree("newPicture", "copyPicture")
# 删除文件夹
shutil.rmtree("copyPicture")