hello world

人生若只如初见

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   支持所有的语言,但只支持有限的数据类型

posted on 2019-08-19 23:29  一壶兔  阅读(108)  评论(0编辑  收藏  举报

导航