序列化:指把python中的数据以文本或二进制的方式进行转换,并且还能反序列化为原来的数据(转成二进制)
为什么需要对数据进行序列化: 数据在程序与网络中进行传输和存储时,需要以更加方便的形式进行操作
主要方法:
①二进制序列化模块 pickle (python专用)②文本序列化模块 json (互联网通用)Pickle 协议和 JSON (JavaScript Object Notation) 间有着本质的不同:
JSON 是一个文本序列化格式(它输出 unicode 文本,尽管在大多数时候它会接着以 utf-8 编码),而 pickle 是一个二进制序列化格式;JSON 是我们可以直观阅读的,而 pickle 不是;JSON是可互操作的,在Python系统之外广泛使用,而pickle则是Python专用的;默认情况下,JSON 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型(可以合理使用 Python 的对象内省功能自动地表示大多数类型,复杂情况可以通过实现 specific object APIs 来解决)。参见:json 模块:一个允许JSON序列化和反序列化的标准库模块
dumps() 序列化,可以把一个python的任意对象序列化成为一个二进制
返回一个序列化后的二进制数据pickle.dumps(var)loads() 反序列化,可以把一个序列化后的二进制数据反序列化为python的对象
返回一个反序列化后的python对象pickle.dumps(var)
dump() 序列化,把一个数据对象进行序列化并写入到文件中
pickle.dump(var,fp)参数1:需要序列化的数据对象参数2:写入的文件对象load() 反序列化,在一个文件中读取序列化的数据,并且完成一个反序列化
参数1:读取的文件对象pickle.load(fp)举例:
(1)基本的序列化与反序列化操作
vars = 'i love you' vars = [1,2,3,4] vars = {'name':'张三','age':20,'sex':'m'} # ①使用 pickle.dumps方法 进行序列化成为一个二进制的数据 res = pickle.dumps(vars) ''' 分别返回: b'\x80\x03X\n\x00\x00\x00i love youq\x00.' <class 'bytes'> b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04e.' <class 'bytes'> b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x06\x00\x00\x00\xe5\xbc\xa0\xe4\xb8\x89q\x02X\x03\x00\x00\x00ageq\x03K\x14X\x03\x00\x00\x00sexq\x04X\x01\x00\x00\x00mq\x05u.' <class 'bytes'> ''' # ②使用 loads方法 完成一个反序列化 res = pickle.loads(res) print(res,type(res)) ''' 返回: {'name': '张三', 'age': 20, 'sex': 'm'} <class 'dict'> '''(2)如何把一个python数据进行序列化后写入文件?并且再次读取出来?
:使用 dumps 方法完成
#定义数据 vars = {'name':'张三','age':20,'sex':'m'} # 进行序列化 res = pickle.dumps(vars) # 写入文件 with open('./data.txt','wb') as fp: fp.write(res)(3)如何把一个反序列的二进制文件读取处理,并完成反序列化?
: 使用 loads 方法完成
#打开文件进行读取 with open('./data.txt','rb') as fp: res = fp.read() # 进行反序列化 vardict = pickle.loads(res) print(vardict)(4)使用 pickle模块给提供的方法完成 load,dump
#写 vars = {'name':'张三','age':20,'sex':'m'} with open('./data2.txt','wb') as fp: pickle.dump(vars,fp) # 在此处调用pickle模块的方法 #读 with open('./data2.txt','rb') as fp: newdict = pickle.load(fp) # 在此处调用pickle模块的方法 print(newdict)JSON 是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式。 JSON 在js语言中是一个对象的表示方法,和Python中的字典的定义规则和语法都很像 JSON 在互联网中又是一种通用的数据交换、数据传输、数据定义的一种数据格式
json.dumps() 完成json格式数据的序列化json.loads() 完成json格式数据的反序列化json.dump() 和pickle模块的dump方法一样json.load() 和pickle模块的load方法一样①数据格式:data.json
以下三种格式都属于json格式化数据
# 1 {'name':'admin','age':20,'sex':'男'} # 2 [1,2,3] # 3 [ {'name':'admin','age':20,'sex':'男'}, {'name':'aa','age':21,'sex':'m'} ]②对象定义:demo.js
javascript 中的对象定义方法
var obj = {'name':'admin','age':20,'sex':'男'}javascript 中的数组定义方法
var arr = [1,2,3]