这篇是一些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文件
未完待续......