python 模块(time,datetime,random,序列化模块)

模块其实是将一些公用的功能代码写在一个py文件中,在其它模块中可以随意使用该文件中的代码
导入模块的语法:
import 模块
from 模块 import功能

time模块

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模块

# 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)

random模块

专门用来产生随机数的模块

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)

序列化

  • pickle
    序列化:将对象数据转换成二进制形式(字节)
    反序列化:将二进制字节转换回对象
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"))
  • json模块
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"))

hashlib模块

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模块

封装文件和文件夹的相关操作

# 移动文件
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")

你可能感兴趣的:(Python,python)