序列化和反序列化

博客介绍了Python中序列化与反序列化的概念,即把内存数据转换为字节序列输出到文件为序列化,反之则为反序列化。还介绍了pickle模块、JSON和msgpack的相关方法,如pickle.dumps和pickle.load,json.dumps和json.loads等,以及msgpack的安装和使用。

为什么要序列化

文件是字节序列,所以必须把内存中数据转换成字节序列,输出到文件.这就是序列化.反之,从文件的字节序列恢复到内存,并且还原类型,就是反序列化.

定义

  • 序列化:就是把不可传输的对象转换为可存储或可传输的过程
  • 反序列化:就是把在磁盘,等介质中的数据转换为对象

pickle模块

pickle模块实现了用于对Python对象结构进行序列化和反序列化的二进制协议。“Pickling”是将Python对象转换为字节流的过程,“unpickling”是反向操作,由此字节流二进制文件或字节对象)转换回对象结构。

pickle.dumps(obj, protocol=None, *, fix_imports=True)

将对象的腌制表示作为bytes对象返回,而不是将其写入文件。

a = 99
b = 'c'
c = list('123')
d = {'a':1,'b':'abc','c':[1,2,3]}
import pickle
with open('E:/test/ser','wb') as f:
    pickle.dump(a,f)

pickle.load(file, *, fix_imports=True, encoding=“ASCII”, errors=“strict”)

从打开的文件对象file读取pickled对象表示形式,并返回其中重新构建的对象层次结构。

with open('E:/test/ser','rb') as f1:
    for i in range(6):
        x = pickle.load(f1)
        print(type(x),x)

下例中,序列化时只保存类名

class AAAA:
    BBBB = 'abc'
    def bbb(self):
        print('+++++++++')

s =AAAA()

ser = pickle.dumps(s)
with open('E:/test/ser3','wb') as f2:
    f2.write(ser)

with open('E:/test/ser3','rb') as f3:
    x = pickle.load(f3)
    print(x)
    x.bbb()

序列化应用

在这里插入图片描述

JSON

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

使用此conversion table将obj序列化为JSON格式的str

import json

x = {'a':1,'b':2,'c':['1','2'],'d':{'e':50,'f':[1,2,3]}}
y = json.dumps(x)
print(type(y),x)
print(y)

y1 = json.loads(y)
print(type(y1))
print(y1)

json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

使用此conversion table将包含JSON文档的s(a str实例)解压缩为Python对象

msgpack

安装

pip install msgpack

使用

import msgpack
m = msgpack.dumps(x)
print(type(m),m)
print(len(m))

z = msgpack.loads(m)
print(z)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值