day28
一、序列化与反序列化的介绍
什么是序列化?什么是反序列化
序列:字符串
序列化:将其他数据类型转化为字符串的过程
反序列化:将字符串转为其他数据类型的过程
序列化指的是把内存的数据类型转换成一个特定格式的内容,该格式内容可用于存储或者传输给其他平台使用
内存中的数据类型------>序列化-------->特定的格式(json格式或者pickle格式)
为何要序列化
写文件必须是字符串或者二进制
基于网络传输的数据必须是二进制
序列化得到的结果==》特定的格式的内容有两种用途
1、可用于存储==》用于存档(把内存的数据类型转化为一种特定的格式类型,将其保存到硬盘文件里去,该文件日后的用途是就自己的软件来读,读出来文件,再反序列化,在自己的软件上运行)
2、传输给其他平台使用==》跨品台数据交互 (把内存的数据类型转化为一种特定的格式类型,将其保存到硬盘文件里去,该文件日后的用途是将其丢给其他平台上使用)
Python java
列表 特定的格式 数组
强调:
针对用途1的特定格式:可是一种专用的格式==》pickle(只有Python可以识别)
针对用途2的特定格式:用该是一种通用,能够被所有语言识别的格式==》json
3、如何序列化与反序列化
1 # 将序列化的数据写入test.json里去(复杂方法) 2 import json 3 json_res = json.dumps([1,'aaa',True,False]) 4 print(json_res, type(json_res)) # [1, "aaa", true, false] <class 'str'> 5 with open('test.json',mode='wt', encoding='utf-8') as f: 6 f.write(json_res) 7 8 # 将序列化的数据写入test.json里去(简单方法) 9 10 import json 11 with open('test.json',mode='wt', encoding='utf-8') as f: 12 json.dump([1,'aaa',True,False],f) 13 14 # 将test.json文件中的数据反序列化(复杂方法) 15 import json 16 with open('test.json', mode='rt', encoding='utf-8') as f: 17 json_res = f.read() 18 l = json.loads(json_res) 19 print(l, type(l)) # [1, 'aaa', True, False] <class 'list'> 20 21 # 将test.json文件中的数据反序列化(复杂方法) 22 import json 23 with open('test.json', mode='rt', encoding='utf-8') as f: 24 l = json.load(f) 25 print(l,type(l))
4.json格式的补充
json验证:json格式兼容的是所有语言通用的数据类型,不能识别某一语言独有的类型(Python中的集合)
json强调:一定要搞清楚json格式,不要与Python混淆(json格式中没有单引号一说)
json: Python
{} dict
[] list
"string" str
1234.56 int/float
true/false True/False
null None
了解:
json.loads反解内容前加b能将文件中的bytes类型反解出来
1 import json 2 # l = json.loads(b'[1,"aaa",true,false]') 3 # print(l,type(l)) 4 5 res = json.dumps({'name':'郁子奇'}) 6 print(res,type(res)) # {"name": "\u90c1\u5b50\u5947"} <class 'str'> 7 8 res = json.loads(b'{"name": "\u90c1\u5b50\u5947"}') 9 print(res, type(res)) #{'name': '郁子奇'} <class 'dict'>
5、pickle 模块
json模块:支持的数据类型较少,字典,列表,元组=》列表,整形,字符串,布尔值
pickle模块:支持所有的数据类型,只能在Python中用

浙公网安备 33010602011771号