Python内置模块语法学习
random、hashlib、json、time、datetime、os等内置模块语法学习
模块
简单理解为就是一个.py后缀的一个文件
分为三种:
- 内置模块:python自带,可调用
- 第三方模块:别人设计的,可调用
- 自定义模块:自己编写的,可调用
模块之间苦于相互调用,是Python最高级别的组织单元,将程序代码和数据封装起来,可以重用。
导入方式:
- import 直接将一个模块导入进来
- from xxx import xxx 从一个模块中,导入具体的工具
理论上,python模块中,任意一个地方都可以进行导入,但是规范上,我们开发潜规则上,将导入的部分放在python模块文件最开始的位置编写
代码展示:
import random
from datetime import datetime
random模块
- random.randint() 随机生成一个范围内的整数
(a,b),a到b的范围内整数 - random.uniform() 随机生成一个范围内的小数
(a,b),a到b的范围内整数 - random.choice() 随机抽取列表中的一个元素
- random.sample() 随机抽取列表中若干个元素
(list1,a) list1中抽a个 - random.shuffle() 随机打乱列表中的元素
代码展示:
import random
for i in range(2,5):
s1 = random.randint(2,5)
print(s1)
print('_'*50)
for i in range(2, 5):
s2 = random.uniform(2,5)
print(s2)
print('_'*50)
for i in range(2, 5):
list1 = [2,3,4,5]
s3 = random.choice(list1)
print(s3)
print('_'*50)
for i in range(2, 5):
list1 = [2,3,4,5]
s4 = random.sample(list1,2)
print(s4)
print('_'*50)
list1 = [2,3,4,5]
random.shuffle(list1)
print(list1)
运行结果:
hashlib模块
该模块主要是进行数据加密的作用。
常见的加密方式:
- sha256()【可逆】
- md5()【不可逆】
若想要对一个明文进行MD5加密的话,一般都不是直接进行加密,而是先进行加盐操作,之后才会进行md5加密。
代码展示:
import hashlib
info = '这里是要加密的:12345678'
# 创建hashlib中的加密对象,md5()加密方法
md5_obj = hashlib.md5()
# 设置确定要编码的明文和加密使用的编码
md5_obj.update(info.encode('UTF-8'))
# 调用函数,开始加密
mi_wen = md5_obj.hexdigest()
print(f"明文:{info},通过md5加密后得到密文:{mi_wen}")
info = '这里是要加密的:12345678'
# 创建hashlib中的加密对象,md5()加密方法
sha256_obj = hashlib.sha256()
sha256_obj.update(info.encode('UTF-8'))
# 调用函数,开始加密
mi_wen = sha256_obj.hexdigest()
print(f"明文:{info},通过sha256加密后得到密文:{mi_wen}")
print('-'*50)
info = '这里是要加密的:12345678'
# 创建hashlib中的加密对象
md5_obj = hashlib.md5('---'.encode('UTF-8')) # 加盐操作
# 设置编码
md5_obj.update(info.encode('UTF-8'))
# 调用函数,开始加密
mi_wen = md5_obj.hexdigest()
print(f"明文:{info},通过md5加密后得到密文:{mi_wen}")
json模块
本质上是一个特殊格式的字符串 ,但是相比较于字符串而言,json是可以通过键获取值的
判断一个字符串是否符合json的格式:
- 看字符串是否是由双引号括起来,若不是,那么该字符串转不了json格式数据
- 若值是由小括号括起来的多个元素,也是不能够转json格式数据的
序列化和反序列化:
- 序列化:将代码中的数据转化成网络中传输的数据流
【python中的字典数据 --> json格式的字符串】
json.dumps(dict,ensure_ascii=False) - 反序列化:将网络中传输的数据流还原成代码中的数据格式
【json格式的字符串 --> python中的字典数据】
json.loads(json)
代码展示:
import json
#【python中的字典数据 --> json格式的字符串】
d1 = {"数值1":"1","数值2":"2","数值3":"3","数值4":"4"}
print(d1,type(d1))
d1 = {"数值1":"1","数值2":"2","数值3":"3","数值4":"4"}
d1 = json.dumps(d1,ensure_ascii=False)
print(d1,type(d1))
print("_"*50)
#若不是双引号括起来,那么该字符串转不了json格式数据
d2 = {'数值1': '1', '数值2': '2', '数值3': '3', '数值4': '4'}
d2 = json.dumps(d2,ensure_ascii=False)
print(d1,type(d2))
print("_"*50)
# 【json格式的字符串 --> python中的字典数据】
j ='''{"数值1":"1","数值2":"2","数值3":"3","数值4":"4"}'''
print(j,type(j))
j = json.loads(j)
print(j,type(j))
运行结果:
time 和 datetime模块
- time.time()
生成时间戳格式对象,时间戳存储时占用的字节相比较于格式化后的字符串而言,是少很多的。
代码展示:
import time
from datetime import datetime
t1 = time.time()
print(t1,type(t1))
运行结果:
- 时间戳 ->datetime ->格式化日期转换
代码展示:
import time
from datetime import datetime
t1 = time.time()
print(t1,type(t1))
# 时间戳 -> datetime
t1 = datetime.fromtimestamp(t1)
print(t1,type(t1))
#datetime-> 年日月时分秒
t1 = datetime.strftime(t1,'%Y-%m-%d-%H:%M:%S')
print(t1,type(t1))
运行结果:
- 字符串 -> datetime-> 时间戳
代码展示:
t1 = '2024-12-06-20:03:13'
print(t1,type(t1))
# 字符串 -> datetime
t1 = datetime.strptime(t1,'%Y-%m-%d-%H:%M:%S')
print(t1,type(t1))
# datetime-> 时间戳
t1 = t1.timestamp()
print(t1,type(t1))
运行结果:
- 使用datetime对象中的属性可以时间获取年月日时分秒
代码展示:
import time
from datetime import datetime
t1 = 1733486593.9999
t1 = datetime.fromtimestamp(t1)
print(f"{t1.year}年{t1.month}月{t1.day},{t1.hour}时{t1.minute}分{t1.second}秒")
运行结果:
os模块
使用os模块中的功能操作文件或者文件夹
- os.path.exists()判断目标是否存在
并且如果有\b或者\t,\n等特殊含义的命名,需要\来表现
- os.path.join()路径拼接
- os.path.abspath(file)获取当前文件所在的路径
- os.path.dirname()获取某一个文件所处的父级目录路径
- os.path.isfile()判断一个路径是否是文件
- os.mkdir()创建一个文件夹
- 删除路径
- os.remove()若目标路径是一个文件
- os.rmdir()若目标文件是一个文件夹
代码展示:
import os
# os.path.join()路径拼接
ml = os.path.join('day09','data','test1')
print(ml)
print(os.path.exists(ml))
print('_'*50)
#获取当前文件所在的路径
ml1 = os.path.abspath(__file__)
print(ml1)
print(os.path.exists(ml1))
print('_'*50)
#获取某一个文件所处的父级目录路径
ml2 = os.path.dirname(ml1)
print(ml2)
print('_'*50)
#判断一个路径是否是文件
print(os.path.isfile(ml1))
print(os.path.isfile(ml2))
print('_'*50)
#判断一个路径是否是文件夹
print(os.path.isdir(ml1))
print(os.path.isdir(ml2))
#创建一个文件夹
ml3 = os.path.join('data','ml3')
os.mkdir(ml3)
#删除路径,若目标路径是一个文件
ml4 = 'E:\projects\pythonprojects\\base\day09\data\\test1'
os.remove(ml4)
#若目标文件是一个文件夹
os.rmdir(ml3)
运行结果:
、