pickle模块的使用

在python3中,用于序列化的两个模块:json、pickle。Json提供四个方法,分别是dumps、loads、dump、load;pickle也提供四个方法,即dumps、loads、dump、load。

pickle可存储的数据类型:数字、字符串、列表、元组、集合、字典、函数、类。

pickle常用方法:

(1)pickle.dumps(obj, protocol=None, *, fix_imports=True):把obj对象序列化后,以bytes对象返回,不写入文件;可选参数protocol表示pickler使用的协议。

import pickle

l = [1,2,3,4,5]

tup = (1,2,3,4,5)

dic = {'k1':'v1','k2':'v2','k3':'v3'}

 

pickle_l = pickle.dumps(l)

pickle_tup = pickle.dumps(tup)

pickle_dic = pickle.dumps(dic)

 

print(pickle_l)

print(pickle_tup)

print(pickle_dic)

运行结果:

b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.'

b'\x80\x03(K\x01K\x02K\x03K\x04K\x05tq\x00.'

b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.'

(2)pickle.loads(data, *, fix_imports=True, encoding='ASCII', errors='strict'):将data反序列化,从byte对象转换为Python对象;encoding表示编码方式。

import pickle

 

l = pickle.loads(b'\x80\x03]q\x00(K\x01K\x02K\x03K\x04K\x05e.')

tup = pickle.loads(b'\x80\x03(K\x01K\x02K\x03K\x04K\x05tq\x00.')

dic = pickle.loads(b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.')

 

print(l)

print(tup)

print(dic)

运行结果:

[1, 2, 3, 4, 5]

(1, 2, 3, 4, 5)

{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}

(3)pickle.dump(obj, file, protocol=None, *, fix_imports=True):序列化对象obj,并将结果数据流写入到文件对象file中。

import pickle

 

dic = {'k1':'v1','k2':'v2','k3':'v3'}

with open('data.txt','wb') as f:

    pickle.dump(dic,f)

 

with open('data.txt','rb') as f:

    print(f.read())

运行结果:

b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.'

(4)pickle.load(file, *, fix_imports=True, encoding='ASCII', errors='strict'):将文件对象file反序列化,转换为python对象,encoding表示编码方式(ASCII、utf-8、bytes)。

import pickle

 

dic = {'k1':'v1','k2':'v2','k3':'v3'}

with open('data.txt','wb') as f:

pickle.dump(dic,f)

 

with open('data.txt','rb') as f:

    pic = pickle.load(f,encoding='bytes')

    print(type(pic))

print(pic)

运行结果:

<class 'dict'>

{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}

注;load只能读取一个dump中的对象;但dump可以存取多个对象。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值