python序列化pickle

什么叫做序列化?

将内存中的对象转换为线性结构的字符串(有时也称字节流),以便存储或者传输.这种对象转换为字符串的行为通常叫做序列化.内存中的任意数据结构都可以映射为一个字符串.

序列化

函数签名

#pickle.dump(obj, file[, protocol])

首先尝试将table对象序列化写入文件dbase中,写入方式是字节形式:

table = {'a' : [1, 2, 3], 'b' : ['spam', 'egg'], 'c' : {'name' : 'Bob'}}
with open('dbase', 'wb') as ff:
    pickle.dump(table, ff)

如果我们打开这个dbase文件,可以看到如下一些看起来没意义的字符串,其实是python用内部约定的方式对table对象转换为了这种字符串.这里请注意不同版本的python序列化后的字符串可能有所不同,因此序列化适用于保存不是特别重要的数据.否则升级python版本后,反序列化会还原对象时会出现不一致的问题.

(dp0
S'a'
p1
(lp2
I1
aI2
aI3
asS'c'
p3
(dp4
S'name'
p5
S'Bob'
p6
ssS'b'
p7
(lp8
S'spam'
p9
aS'egg'
p10
as.

也可以序列化后不用写入文件,直接用pickle.dump以字符串返回:

string = pickle.dumps(table)

反序列化

函数签名:

pickle.load(file)

从dbase文件读出反序列化还原对象:

with open('dbase', 'rb') as fobj:
    table_ = pickle.load(fobj)
print table_

输出:

{'a': [1, 2, 3], 'c': {'name': 'Bob'}, 'b': ['spam', 'egg']}

从输出结果不难看出,与原来的table字典内容相同.

同样我们可以直接读入字符串反序列化:

obj = pickle.loads(string)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值