什么是序列化
序列化指的是把内存的数据类型转换成一种特定的格式内容,该格式内容可用于存储或者传输给其他平台使用
内存中的数据类型----》序列化------》特定的格式(json格式或者pickle格式)
内存中的数据类型《----反序列化《------特定的格式(json格式或者pickle格式)
eval源码
为何要用序列化
通过序列化得到的格式用于存储和传输使用
1.存储 :保存程序此刻的运行状态,存档
2.传输使用:跨平台数据交互
强调:
针对用途1的特定格式应该是一种专用的格式 pickle 只有python可以使用
针对用途2的特定格式应该是一种通用的、能够被所有语言识别的格式 json 提取了多种语言共有的类型
json可以用于存档但不推荐
如何序列化和反序列化
json.dumps序列化
json.loads反序列化
json验证:json格式兼容的是所有语言通用的数据类型,不能识别某一种语言所独有的数据类型
json强调:所有的格式都是json格式不是python格式,在python3.5中b类型是不被允许的其他版本的可以
pickle模块: p2与p3有一个兼容性问题
pickle.dumps() 转化为二进制模式
pickle.loads()反解
猴子补丁:猴子补丁的核心就是用自己的代码替换所用模块的源代码
configparser模块:查找配置文件
config.sections()查看所有的标题
config.options()查看所有key=value的形式的key值
config.items()查看所有key = value的键值对,返回元组形式
config.get(section,key)取value
config.getint()取得值是int形式
config.getfloat()取得的值时float形式
hashlib模块:
什么是哈希:hash是一类算法,该算法接受传入的内容,经过运算得到一串哈希值
hash的特点:
1.只要传入的内容一样,得到的hash值必然一样
2.不能由hash值反解成内容
3.只要是有的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的
hash的用途:用于加密特点2,文件完整性的校验特点1、3
如何用?
1.import hashlib
m = hashlib.md5()
m.update("hello".ecnode("utf-8"))
print(m.hexdigest())
注意:把一段很长的数据update多次,与一次update这段长数据,得到的结果一样
但是update多次为校验大文件提供了可能。
以上方式加密还是可以通过撞库来实现暴力破解,所以有必要在加密算法中添加自定义的key来进行加密
subprocess模块:import subprocess
res1=subprocess.Popen(r'dir C:UsersAdministratorPycharmProjects est函数备课',shell=True,stdout=subprocess.PIPE)
res=subprocess.Popen('findstr test*',shell=True,stdin=res1.stdout,
stdout=subprocess.PIPE)
print(res.stdout.read().decode('gbk')) #subprocess使用当前系统默认编码,得到结果为bytes类型,在windows下需要用gbk解码