python基础总结3(内置模块类)

本文概述了Python编程中time、datetime、random、pickle、json和hashlib等内置库的基本功能,包括计时、时间差计算、随机数生成、数据序列化与反序列化以及文件操作和加密。
摘要由CSDN通过智能技术生成

这篇是一些python内置库的总结

time模块

可以让程序停止n秒

import time
# 让程序停止三秒运行
time.sleep(3)

可以计算简单的时间差

import time
t1 = time.time()  # 当前系统时间, 从1970年1月1日0点0分0秒开始到现在经过了多少秒
time.sleep(2)
t2 = time.time()  # 当前系统时间, 从1970年1月1日0点0分0秒开始到现在经过了多少秒

datetime模块

datetime模块中有datetime、date、time三个部分
datetime导入方式

from datetime import datetime

简单用法

获取现在的时间

datetime.now()

创建一个时间

datetime(2015,1,1,0,0)

计算时间差

# 计算时间差
t1 = datetime(2024,4,16,0,0)
t2 =datetime(2024,4,14,0,0)
print(t1-t2)  #结果2 days, 0:00:00
# 计算总秒数
print((t1-t2).total_seconds()) # 结果172800.0

格式化时间

前置知识

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

格式化时间

t = datetime.now()  # 结果,代码执行那一刻的时间2024-04-17 15:18:18.862158
#时间转化字符串
print(t.strftime("%Y年%m月%d日 %H时%M分%S秒"))   # 结果2024年04月17日 15时18分18秒
#字符串转化时间
t3 = "2024-4-17 15:24:30"
print(datetime.strptime(t3,"%Y-%m-%d %H:%M:%S")) # 结果2024-04-17 15:24:30

random模块

专门产生随机数的模块
导入

import random

取随机数

# 随机小数,范围是0-1
print(random.random())
# 随机小数
print(random.uniform(2,9))
# 随机整数(能取到边界)
print(random.randint(2,8))

在列表中随机抽取

lst = ["王","张","李","赵"]
# 随机选一个,返回值
print(random.choice(lst))  
# 随机多个,返回新的列表
print(random.sample(lst,2))

案例:随机验证码

# 随机验证码
import random
# 随机大写字母
def rand_upper():
    return chr(random.randint(65,90))
# 随机小写字母
def rand_lower():
    return chr(random.randint(97,122))
# 随机数字
def rand_num():
    return str(random.randint(0,9))

# 生成四位验证码
def rand_varify_code(n=4):  # 参数n可以指定不止4位验证码
    lst = []
    for i in range(n):
        f = random.randint(1,3)
        if f == 1:
            s = rand_upper()
        elif f == 2:
            s = rand_lower()
        elif f == 3:
            s = rand_num()
        lst.append(s)
    return "".join(lst)

print(rand_varify_code())

pickle模块(load(s),dump(s))

把数据转换为bite字节的模块
导入

import pickle

应用

lst = ["王","张","李"]
# 将数据转化为二进制的字节
bs = pickle.dumps(lst)
# 将数据还原为原本的形式
s = pickle.loads(bs)

loads的定义

(function) def loads(
data: ReadableBuffer,
/,
*,
fix_imports: bool = True,
encoding: str = "ASCII",
errors: str = "strict",
buffers: Iterable[Any] | None = ()
) -> Any

dumps的定义

(function) def dumps(
    obj: Any,
    protocol: int | None = None,
    *,
    fix_imports: bool = True,
    buffer_callback: _BufferCallback = None
) -> bytes

存储数据与转化数据

lst = ["王","张","李"]
# pickle把数据写入到文件中去
pickle.dump(lst,open("d.date",mode="wb"))
# 读取
s = pickle.load(open("d.date",mode="rb"))
print(s)

load的定义

(function) def load(
    file: _ReadableFileobj,
    *,
    fix_imports: bool = True,
    encoding: str = "ASCII",
    errors: str = "strict",
    buffers: Iterable[Any] | None = ()
) -> Any

dump的定义

(function) def dump(
    obj: Any,
    file: SupportsWrite[bytes],
    protocol: int | None = None,
    *,
    fix_imports: bool = True,
    buffer_callback: _BufferCallback = None
) -> None

简要总结:load和dump是对文件操作,loads和dumps是对数据操作


json模块

json是一种通用的数据类型,其本质是字符串,样子非常像python字典的形式。但是因为是字符串,json类型不能进行字典相关的操作,要想进行相关操作必须要先将json类型数据转换为字典类型的数据。
导入模板

import json

dumps(),将python中的字典或者列表转换为json数据

dit = {"name":"李华","age":"18","sex":"man"}
dit_json = json.dumps(dit)
print(dit_json)
# 如果不指定ensure_ascii参数,那么汉字转换为json数据会出现乱码
dit = {"name":"李华","age":"18","sex":"man"}
dit_json = json.dumps(dit,ensure_ascii=False)
print(dit_json)

dumps的定义

(function) def dumps(
    obj: Any,
    *,
    skipkeys: bool = False,
    ensure_ascii: bool = True,
    check_circular: bool = True,
    allow_nan: bool = True,
    cls: type[JSONEncoder] | None = None,
    indent: int | str | None = None,
    separators: tuple[str, str] | None = None,
    default: ((Any) -> Any) | None = None,
    sort_keys: bool = False,
    **kwds: Any
) -> str

loads(),将json数据转换为python数据、

dit_json = '{"name":"李华","age":"18","sex":"man"}'
dit = json.loads(dit_json)

loads的定义

(function) def loads(
    s: str | bytes | bytearray,
    *,
    cls: type[JSONDecoder] | None = None,
    object_hook: ((dict[Any, Any]) -> Any) | None = None,
    parse_float: ((str) -> Any) | None = None,
    parse_int: ((str) -> Any) | None = None,
    parse_constant: ((str) -> Any) | None = None,
    object_pairs_hook: ((list[tuple[Any, Any]]) -> Any) | None = None,
    **kwds: Any
) -> Any

dump(),将python数据转化为json数据被写入文件中

dit = {"name":"李华","age":"18","sex":"man"}
json.dump(dit,open("dit.txt",mode="w",encoding="utf-8"),ensure_ascii=False)

dump的定义

(function) def dump(
    obj: Any,
    fp: SupportsWrite[str],
    *,
    skipkeys: bool = False,
    ensure_ascii: bool = True,
    check_circular: bool = True,
    allow_nan: bool = True,
    cls: type[JSONEncoder] | None = None,
    indent: int | str | None = None,
    separators: tuple[str, str] | None = None,
    default: ((Any) -> Any) | None = None,
    sort_keys: bool = False,
    **kwds: Any
) -> None

load(),将一个文件中的json型文本转化为python数据

s = json.load(open("dit.txt",mode="r",encoding="utf-8"))
print(s)

load的定义

(function) def load(
    fp: SupportsRead[str | bytes],
    *,
    cls: type[JSONDecoder] | None = None,
    object_hook: ((dict[Any, Any]) -> Any) | None = None,
    parse_float: ((str) -> Any) | None = None,
    parse_int: ((str) -> Any) | None = None,
    parse_constant: ((str) -> Any) | None = None,
    object_pairs_hook: ((list[tuple[Any, Any]]) -> Any) | None = None,
    **kwds: Any
) -> Any

hashlib模块

hashlib模块可以实现MD5加密算法
导入库

import hashlib

加密

# 创建MD5对象
obj = hashlib.md5()
# 将要加密的信息传递给obj
# update只能接收字节形式的数据
obj.update("5201314".encode("utf-8"))
# 从obj中拿取密文
mi = obj.hexdigest()
# 结果:723d505516e0c197e42a6be3c0af910e

但是由于MD5已经存在很多年了,直接加密容易撞库被反推出来
避免撞库的方法:加盐

# 创建MD5对象
# 括号内的是盐,内容胡乱写
obj = hashlib.md5(b"asdfwfxadsadsqawdasd")
# 将要加密的信息传递给obj
obj.update("5201314".encode("utf-8"))
mi = obj.hexdigest()
# 结果:4ee918b57d561ed84cce329aaefdebcb
# 可以对比一下,和上面的结果完全不一样

shutil模块

shutil主要封装了文件和文件夹的相关操作. 比如文件复制粘贴, 文件移动, 文件夹的复制, 移动等等
导入模块

import shutil

相关操作

fsrc = open("dir/a.txt", mode="rb")
fdst = open("dir/c.txt", mode="wb")
shutil.copyfileobj(fsrc, fdst, 1024*10)  # 复制文件对象

shutil.copyfile("dir/a.txt", "dir/d.txt")  # 复制文件, 直接给出路径就可以了

shutil.copymode("dir/a.txt", "dir/e.txt")
shutil.copymode(".", "dir/e.txt")  # 把访问权限复制
shutil.copystat(".", "dir/d.txt")  # 把权限, 访问时间, 修改时间等信息复制

shutil.copy("dir/a.txt", "dir/f.txt")  # copyfile() + copymode()
shutil.copy2("dir/a.txt", "dir/f.txt")   # copyfile() + copystat()
shutil.copytree("./dir", "./baby")   # 复制文件夹
shutil.rmtree("dir")  # 删除文件夹

shutil.move(src, dst) # 移动文件, 如果dst文件目录不存在. 则重命名src文件

未完待续...... 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值