day07 json与pickle模块
面向对象
# 序列化模块 json和pickle# hashlib模块
# logging模块# 模块和包
# 自定义模块
# 模块的导入
# 包的导入
# 软件的开发规范
# 面向对象
json模块
json 是一种通用的数据传输格式,本质就是一个字符串
import json
dic = {"operate":'login','username':'alex','password':'bigsb'}
#网络发送之前做
ret = json.dumps(dic) #将字典转为字符串
print(dic)
print(ret,type(ret)) # 通过字符串--> 字节
byte_8 = ret.encode('utf-8')
print(byte_8)
# dic -json.dumps-> json格式的str -encode-> 字节 -->在网络上传递了
# 字节 -decode-> 字符串 -->字典
#接收之后做
str8 = byte_8.decode('utf-8')
print(str8)
ret = json.loads(str8) // 反序列化过程 把字符串转换成字典或者其他数据类型
print(ret)
# 1.网络传输不认识字典 2.我们的文件操作不认识字典 3.在Python之外环境不认识字典
import json
dic = {'北京':{'朝阳':{},'海淀':{}}}
text= json.dumps(dic,ensure_ascii=False) # 序列化的过程 把字典/其它数据类型转换成字符串
print(text)
with open('city',mode = 'w',encoding='utf-8') as f:
f.write(text)
#中文出现编码不影响程序读取
with open('city',encoding='utf-8') as f:
str_d = f.read()
print(str_d)
dic = json.loads(str_d)
print(dic)
# 1.写到文件里的是中文出现编码 ensure_ascii=False #不转换成ascii码
# 2.为什么在json中不能放集合
# json数据类型是一个特殊的字符串
# 在任何语言中它的type都必须是字符串
# 格式要求严格,但是还要满足一些要求 : key必须是字符串,且value只能是:字典 列表 字符串 数字 bool值
# json是所有的编程语言都公认的一种数据类型
# 如果是python语言要给java语言发送信息, 那么就可以转换成json格式,java经过一系列转换就可以获取到字典数据了
#自己补充
# json 作为Python和Java之间交互的中间键,
# Python转换数据之前先转为json,然后发给java,Java解码json,Java发数据之前先转为json再发送Python,Python解码json
#多个语言之间通过json交互,
# 再发数据到网络上之前必须要先转为字符串,就可以通过json来转换
#前端语言与后端语言之间交互也是json
序列化(dump/dumps)和反序列化(load/loads)
# 标准化 --> 变得标准
# 序列化 --> 变成序列
# 序列 --> 按照顺序排列的
#字典是无序的,是散列
# 字符串 = json.dumps(字典/列表) #返回字符串
# 字典/列表 = json.loads(字符串) #返回字典
# loads dumps 和内存交互
# load dump 和文件交互
#dump
import json
lst = ['alex',1,2,3]
with open('file','w',encoding='utf-8') as f:
json.dump(lst,f) #直接序列化并写到文件句柄里
# load
import json
with open('file',encoding='utf-8') as f:
ret = json.load(f)
print(ret) #直接得到列表
s = '{"alex":"sb","wusir":73}'
import json
ret = json.loads(s)
print(ret)
print(ret['alex'])
#符合json规则
# json规则是没有除了字典 列表 字符串 数字 bool值之外的其他类型
# 所有的key都是字符串
#字符串都用双引号包裹
s = '{"alex":"sb","wusir":73}'
import json
ret = json.loads(s) #将字符串转为字典
print(ret)
print(ret['alex'])
#json4种方法
# loads dumps 和内存交互
# load dump 和文件交互
pickle模块
import pickle
dic = {'北京':{'朝阳','昌平'},('天津','河北'):[1,2,3]}
ret = pickle.dumps(dic)
print(ret) #结果为字节
d = pickle.loads(ret)
print(d) #反序列化
with open('pickle_file','wb') as f: #dump直接是二进制
pickle.dump(dic,f)
with open('pickle_file', 'rb') as f:
ret = pickle.load(f)
print(ret)
# pickle是python语言中特有的序列化模块,什么数据类型都支持
#游戏用pickle做存档功能
# pickle和json的区别
# pickle 支持python中的几乎所有数据类型,但是只能python一种语言中使用
# json 支持所有的语言,但只支持有限的数据类型