序列化 加密 OS sys 模块
序列化模块
为什么要有序列化模块
1.文件存取时,遇到的矛盾.
数据 读取出来时,反转不回去.
2.凡是数据通过网络传出去最终的格式必须bytes
序列化模块作用
将一组数据结构转化成特殊的序列(特殊的字符串,bytes)并且还可以反转回去.
序列化模块的分类
json 模块: 是所有语言公认的一种序列.最最常用的
所以支持的python数据结构有限: int str bool dict list(tuple),None,float
pickle模块: 只能python语言中使用的,序列化模块:
支持python所有的数据类型以及对象.
json模块的使用
方法
多个数据存储文件 主要用于网络传输
dumps
loads
单个数据的存取文件
dump
load
举例
import json
dic = {'username': '太白', 'password': 123,'status': False}
ret=json.dumps(dic)
print(ret,type(ret))
ret_dict = json.loads(ret)
print(ret,type(ret_dict))
特殊的参数
特殊的参数ensure_ascii确定是不是使用ascii码 sort_keys我可以给这个字典排序
dic = {'username': '太白', 'password': 123,'status': False}
ret = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(ret,type(ret))
json 文件的存取
import json
dic = {'username': '太白', 'password': 123,'status': False}
#存入文件
with open('jsonlx1.json',encoding='utf-8',mode='w') as f1:
json.dump(dic,f1)
#读取文件
with open('jsonlx1.json',encoding='utf-8') as f1:
dic1 = json.load(f1)
print(dic1,type(dic1))
多json数据的存取
多个数据如何存储到一个文件中 必须换行 不然读取时不识别 会报错?
import json
dic1 = {'username': '太白', 'password': 123,'status': False}
dic2 = {'username': 'alex', 'password': 123,'status': False}
dic3 = {'username': 'ly', 'password': 123,'status': False}
存
with open('jsonmore.json',encoding='utf-8',mode='a') as f1:
f1.write(f'{json.dumps(dic1)}\n{json.dumps(dic2)}\n{json.dumps(dic3)}')
取
with open('jsonmore.json',encoding='utf-8') as f1:
for line in f1:
ret = json.loads(line)
print(ret,type(ret))
pickle模块
简历
1.只能是网络传输
2.只能python语言中使用的, 支持python所有的数据类型以及对象.
方法
只能是网络传输 直接转化为字节
dumps
loads
数据结构存取文件.
dump
load
举例 dump load
import pickle
l1 = ['wusir', '太白', '小黑', 666]
with open('pickle练习.pickle',mode='wb') as f1:
pickle.dump(l1,f1)
with open('pickle练习.pickle', mode='rb') as f1:
ret = pickle.load(f1)
print(ret,type(ret))
import pickle
#多个数据写入文件
l1 = ['wusir', '太白', '小黑1', 666]
l2 = ['wusir', '太白', '小黑2', 666]
l3 = ['wusir', '太白', '小黑3', 666]
#存
with open('pickle练习1.pickle',mode='wb') as f1:
# pickle.dump(l1,f1)
# pickle.dump(l2,f1)
# pickle.dump(l3,f1)
#取
with open('pickle练习1.pickle', mode='rb') as f1:
# ret1 = pickle.load(f1)
# ret2 = pickle.load(f1)
# ret3 = pickle.load(f1)
# print(ret1,ret2,ret3)
while 1:
try:
ret1 = pickle.load(f1)
print(ret1)
except Exception:
break
举例 dumps,loads
只能是网络传输 直接转化为字节
l1 = ['wusir', '太白', '小黑', 666]
ret = pickle.dumps(l1)
print(ret)
l2 = pickle.loads(ret)
print(l2,type(l2))
sys模块
import sys
# sys.path ***
# print(sys.version) # 版本
# for i in range(3):
# print(i)
# # exit() # 强制退出
# # quit()
# for i in range(5):
# print(i)
# print(sys.platform)
os 模块
重点要记
print(os.getcwd())#上一级绝对路径 ***
print(__file__) # 动态获取当前文件的绝对路径父级目录的获取:只用加上os.path.dirname(当前路径)即可
os.path.dirname(os.path.dirname(__fifl__))#爷爷级路径
print(os.chdir("dirname")) 改变当前脚本工作目录;相当于shell下cd **
print(os.curdir) #返回当前目录: ('.') **
print(os.pardir) #获取当前目录的父目录字符串名:('..') **
和文件夹相关
os.makedirs('dirname1/dirname2') 可生成多层递归目录 ***
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 ***
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname ***
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname ***
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 **
和文件相关
os.remove() 删除一个文件 ***
os.rename("oldname","newname") 重命名文件/目录 ***
os.stat('path/filename') 获取文件/目录信息 **
和操作系统差异相关
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" *
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" *
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: *
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' *
path系列,和路径相关
os.path.abspath(path) 返回path规范化的绝对路径 ***
os.path.split(path) 将path分割成目录和文件名二元组返回 ***
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 **
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。 **
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False ***
os.path.isabs(path) 如果path是绝对路径,返回True **
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False ***
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False ***
os.path.join(A,B) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 拼接路径 ***
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 **
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 **
# os.path.getsize(path) 返回path的文件大小 文件的字节数 ***
和执行系统命令相关
os.system("bash command") 运行shell命令,直接显示 **
os.popen("bash command).read() 运行shell命令,获取执行结果 **
os.environ 获取系统环境变量 **
hashlib模块
作用
密码加密
文件的一致性校验
加盐就是加在前面
sha系列: 安全系数高,耗时高.
分步update 与一次性updete效果一样 所以文件效验可以for循环
用法
import hashlib
new_md5 = hashlib.md5() #创建hashlib的md5对象
new_md5.update('字符串'.encode(‘utf-8)) #将字符串载入到md5对象中,获得md5算法加密#注意这里必须要编码,否则报错。
print(new_md5.hexdigest()) #通过hexdigest()方法,获得new_md5对象的16进制md5显示。
简单来说。就是三步:
1,建立加密对象。2,对字符串进行算法加密。3,获得16进制显示
加盐
# 加固定盐
ret = hashlib.md5('1'.encode('utf-8'))#1就是盐
# ret.update('23456'.encode('utf-8'))#动态盐就是设置变量
s = ret.hexdigest()
print(s,type(s))
文件加密效验
import hashlib
def md5_file(path):
ret = hashlib.md5()
with open(path,mode='rb') as f1:
while 1:
content = f1.read(1024)
if content:
ret.update(content)
else:
return ret.hexdigest()
print(md5_file(r'D:\s23\day17\python-3.7.4rc1-embed-win32.zip'))
非学,无以致疑;非问,无以广识